这几个Python库才是爬虫界的天花板!
2023-12-21 09:36:57
? ? ? 今天给新手带来了一些可以用来爬虫的几个Python库。只要正确选择适合自己的Python库才能真正提高爬虫效率,到达高效爬虫目的。
1.PyQuery
from pyquery import PyQuery as pq#网址url = f'https://www.baidu.com/'doc = pq(url=url)#输出HTML内容print(doc.html())
优点:基于jQuery语法,易于使用,可以方便地解析和操作HTML/XML文档。缺点:对于复杂的DOM结构可能支持不完善。
2.requests
import?requests#发送?GET?请求response = requests.get('https://www.baidu.com')#输出响应内容print(response.text)
优点:简单易用,提供了丰富的HTTP方法和功能,支持会话管理和Cookie处理。缺点:同步阻塞,不能处理JavaScript渲染。
3.Scrapy
import scrapy# 定义一个名为MySpider的爬虫类,继承自scrapy.Spider类class MySpider(scrapy.Spider):# 设置爬虫的名称name = 'myspider'# 设置爬虫开始抓取的URL列表????start_urls?=?['https://www.example.com']??# 定义parse方法,该方法是Scrapy用来处理每个下载的响应的地方def parse(self, response):# 提取页面上的所有链接links = response.css('a::attr(href)').getall()# 遍历链接列表,并对每个链接进行处理for link in links:# 打印链接print(link)# 使用yield语句返回一个字典,包含从响应中提取的链接yield {'link': link}
优点:高度可定制,支持分布式爬取,自带的中间件和管道可以方便地扩展功能。缺点:配置和部署相对复杂。
4.Selenium
from selenium import webdriver#创建一个Chrome浏览器实例??driver?=?webdriver.Chrome()??#打开一个网页??driver.get("https://www.example.com")??#获取网页标题并打印出来??print(driver.title)??#关闭浏览器实例??driver.quit()
优点:可以模拟浏览器行为,支持JavaScript渲染,解决动态网页爬取问题。缺点:相对较慢,占用资源较多。
5.Urllib
import?urllib.request??#打开指定的URL并获取网页内容??url = 'https://www.example.com'response?=?urllib.request.urlopen(url)??#读取网页内容并打印??html_content = response.read()print(html_content)
优点:Python标准库,无需额外安装,功能齐全。缺点:相对低级,使用起来较繁琐。
6.Tornado
import tornado.ioloopimport tornado.webimport tornado.httpclientclass MainHandler(tornado.web.RequestHandler):async def get(self):#创建异步HTTP客户端对象http_client = tornado.httpclient.AsyncHTTPClient()#发送异步GET请求到Bing首页response = await http_client.fetch("https://www.bing.com")#获取页面内容并提取标题title = response.body.decode('utf-8')start = title.find("<title>") + len("<title>")end = title.find("</title>", start)title = title[start:end]#返回页面标题给客户端self.write("Bing Title: {}".format(title))def make_app():#创建Tornado应用程序对象return tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":app = make_app()#监听8888端口app.listen(8888)#启动Tornado事件循环tornado.ioloop.IOLoop.current().start()
优点:高性能异步框架,支持大规模并发,适合构建高性能Web应用程序。缺点:相对复杂
7.Pyppeteer
import asynciofrom pyppeteer import launchasync def main():browser = await launch(headless=False)page = await browser.newPage()await page.goto('https://www.google.com')await page.type('input[name="q"]', 'Pyppeteer')await page.click('input[type="submit"]')await page.waitForNavigation()print(await page.title())await browser.close()asyncio.get_event_loop().run_until_complete(main())
优点:基于Chrome DevTools Protocol,可以完全控制Headless Chrome浏览器,支持JavaScript渲染。缺点:相对较新,社区支持可能不如Selenium成熟。
8.feedparser
import feedparser#解析订阅源url = 'https://rss.slashdot.org/Slashdot/slashdotMain'feed = feedparser.parse(url)#获取订阅源的元数据feed_title = feed.feed.titlefeed_description = feed.feed.descriptionprint("Feed Title:", feed_title)print("Feed Description:", feed_description)#遍历订阅项for entry in feed.entries:entry_title = entry.titleentry_link = entry.linkif 'published' in entry:entry_published = entry.publishedelse:entry_published = "Unknown"print("\nEntry Title:", entry_title)print("Entry Link:", entry_link)print("Published:", entry_published)
优点:简单易用,支持解析各种格式的RSS和Atom订阅源。缺点:功能相对有限,不适合处理复杂的页面结构。
9.playwright
from playwright.sync_api import Playwright, sync_playwrightwith sync_playwright() as p:# 选择浏览器引擎和选项browser = p.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()# 打开百度网站page.goto('https://www.baidu.com')# 在搜索框中输入关键字并提交搜索search_input = page.locator('#kw')search_input.fill('Python')search_button = page.locator('#su')search_button.click()# 等待搜索结果加载完毕并截图page.wait_for_selector('#content_left')page.screenshot(path='baidu_search.png')# 关闭浏览器context.close()browser.close()
优点:支持多种浏览器(包括Chrome、Firefox、WebKit),提供了简洁易用的API,支持跨平台。缺点:相对较新,社区支持可能不如Selenium成熟。
10.mechanicalsoup
import mechanicalsoup#创建一个?Browser?对象browser = mechanicalsoup.StatefulBrowser()#发起?GET?请求并打开百度首页browser.open("https://www.baidu.com")#输出当前页面的标题print(browser.get_current_page().title)#选择搜索框元素并填入关键字browser.select_form()browser["wd"] = "Python"#提交搜索表单browser.submit_selected()#输出搜索结果页面的标题print(browser.get_current_page().title)
优点:简化了与网站交互的过程,使用起来类似于requests和BeautifulSoup的结合体。缺点:功能相对较少,不支持JavaScript渲染。
11.Aiohttp
import aiohttpimport asyncioasync def fetch_url(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():url = 'https://example.com'html = await fetch_url(url)print(html)if __name__ == '__main__':loop = asyncio.get_event_loop()loop.run_until_complete(main())
优点:基于异步IO的高性能HTTP客户端/服务器框架,适用于构建异步Web应用程序。缺点:相对复杂
12.newspaper3k
from newspaper import Article#提供文章?URLurl = 'https://news.sina.com.cn/c/2021-06-01/123456789.html'#初始化?Article?对象,并设置语言为中文article = Article(url, language='zh')#下载文章内容article.download()#解析文章article.parse()#打印文章标题print("文章标题:", article.title)#打印文章作者print("文章作者:", article.authors)#打印文章发布日期print("发布日期:", article.publish_date)#打印文章正文print("文章正文:", article.text)#提取文章关键词article.nlp()print("关键词:", article.keywords)#生成文章摘要print("文章摘要:", article.summary)
优点:易于使用,提供了从新闻网站抽取文章的功能,支持多种语言。缺点:不适合处理非新闻网站的页面。
14.Frontera
from frontera.core import FrontierManagerfrom frontera.core import Strategyfrom frontera.logger.frontier import FrontierLoggerfrom frontera.settings import Settingsfrom frontera.utils.downloader import Downloader# 创建FrontierManager对象frontier_manager = FrontierManager(seed_urls=['http://example.com'])# 设置策略类和下载器类settings = Settings()settings.set(param='STRATEGY', value=Strategy)settings.set(param='DOWNLOADER', value=Downloader)# 创建FrontierLogger对象,用于记录爬虫日志frontier_logger = FrontierLogger('frontera.log')# 运行爬虫frontier_manager.run(settings, frontier_logger)
优点:分布式爬虫框架,支持动态网页爬取和抓取策略的自定义。缺点:配置和部署相对复杂
15.grab
import?grab??# 创建 Grab 对象g = grab.Grab()# 设置要抓取的 URLurl = "http://example.com"# 获取页面内容g.go(url)# 获取页面标题title = g.doc.title()print("Title:", title)# 获取页面上的所有段落文本paragraphs = g.doc.find_all("p")for p in paragraphs:print("Paragraph:", p.text())
文章来源:https://blog.csdn.net/m0_74433188/article/details/135122265
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!