Python| Web Scraping 世界中的工具
网页抓取可以使用多种工具或使用Python中的不同框架来完成。有多种选项可用于从网页中抓取数据,每种选项都适合不同的需求。
首先,让我们了解网络抓取和网络抓取之间的区别。网络爬虫用于使用机器人(也称为爬虫)对页面上的信息进行索引。另一方面,Web 抓取是一种使用机器人(也称为 Scrapers)自动提取信息/内容的方式。
让我们看看一些最常用的 Python3 网络抓取工具:
- 网址库2
- 要求
- 美丽汤
- 文件格式
- Selenium
- 机械汤
在所有可用的框架/工具中,只有urllib2
预装了Python。因此,如果需要,需要安装所有其他工具。让我们详细讨论所有这些工具。
- Urllib2 :
Urllib2
是一个用于获取 URL 的Python模块。它以 urlopen函数的形式提供了一个非常简单的接口,它能够使用不同的协议(如 HTTP、FTP 等)获取 URL。# Using urllib2 module from urllib.request import urlopen html = urlopen("http://geeksforgeeks.org") print(html.read())
输出 :
- 请求:
Requests
没有预装Python。 Requests 允许发送 HTTP/1.1 请求。可以使用简单的Python字典添加标题、表单数据、多部分文件和参数,并以相同的方式访问响应数据。可以使用 pip 来安装请求。
pip install requests
# Using requests module import requests # get URL req = requests.get('https://www.geeksforgeeks.org/') print(req.encoding) print(req.status_code) print(req.elapsed) print(req.url) print(req.history) print(req.headers['Content-Type'])
输出 :
- BeautifulSoup :
Beautiful soup
是一个可以使用不同解析器的解析库。 Beautiful Soup 的默认解析器来自 Python 的标准库。它创建了一个解析树,可用于从 HTML 中提取数据;用于剖析文档并提取所需内容的工具包。它会自动将传入文档转换为 Unicode,将传出文档自动转换为 UTF-8。pip
可用于安装 BeautifulSoup :pip install beautifulsoup4
# importing BeautifulSoup form # bs4 module from bs4 import BeautifulSoup # importing requests import requests # get URL r = requests.get("https://www.geeksforgeeks.org") data = r.text soup = BeautifulSoup(data) for link in soup.find_all('a'): print(link.get('href'))
输出 :
- Lxml:
Lxml
是一个高性能、生产质量的 HTML 和 XML 解析库。如果用户需要速度,那就选择 Lxml。 Lxml 有许多模块,其中一个模块是etree
,它负责使用这些元素创建元素和结构。可以通过使用
pip
工具将 lxml 安装为Python包来开始使用它:pip install lxml
# importing etree from lxml module from lxml import etree root_elem = etree.Element('html') etree.SubElement(root_elem, 'head') etree.SubElement(root_elem, 'title') etree.SubElement(root_elem, 'body') print(etree.tostring(root_elem, pretty_print = True).decode("utf-8"))
输出 :
- Selenium :一些网站使用 javascript 来提供内容。例如,他们可能会等到您在页面上向下滚动或单击按钮后再加载某些内容。对于这些网站,需要selenium。 Selenium是一种自动化浏览器的工具,也称为网络驱动程序。它还带有Python绑定,可直接从您的应用程序控制它。
pip
包用于安装selenium :pip install selenium
# importing webdriver from selenium module from selenium import webdriver # path for chromedriver path_to_chromedriver ='/Users/Admin/Desktop/chromedriver' browser = webdriver.Chrome(executable_path = path_to_chromedriver) url = 'https://www.geeksforgeeks.org' browser.get(url)
输出 :
- MechanicalSoup :
MechanicalSoup
是一个Python库,用于自动与网站交互。它会自动存储和发送 cookie,跟踪重定向,并且可以跟踪链接和提交表单。它不执行 JavaScript。可以使用以下命令安装 MechanicalSoup :
pip install MechanicalSoup
# importing mechanicalsoup import mechanicalsoup browser = mechanicalsoup.StatefulBrowser() value = browser.open("http://geeksforgeeks.org/") print(value) value1 = browser.get_url() print(value1) value2 = browser.follow_link("forms") print(value2) value = browser.get_url() print(value)
- Scrapy:
Scrapy
是一个开源和协作的网络爬虫框架,用于从网站中提取所需的数据。它最初是为网页抓取而设计的。它可用于管理请求、保留用户会话遵循重定向和处理输出管道。安装 scrapy 有两种方法:
- 使用点子:
pip install scrapy
- 使用 Anaconda:首先安装Anaconda或Miniconda ,然后使用以下命令安装 scrapy:
conda install -c conda-forge scrapy
# importing scrapy module import scrapy class GeeksSpider(scrapy.Spider): name = "geeks_spider" start_urls = ['https://www.geeksforgeeks.org'] # Parse function def parse(self, response): SET_SELECTOR = 'geeks' for geek in response.css(SET_SELECTOR): pass
使用以下命令运行scrapy代码:
scrapy runspider samplescapy.py
输出 :
- 使用点子:
上面讨论的模块是 Python3 最常用的抓取工具。虽然还有一些像 Mechanize、Scrapemark 这样的 Python3 不再兼容但不再兼容。
参考 :
- https://elitedatascience.com/python-web-scraping-libraries
- Python
- http://blog.datahut.co/beginners-guide-to-web-scraping-with-python-lxml/