php禁止网页抓取( 网页爬取编写网页需要使用的HTML语言(lxml)和解析)
优采云 发布时间: 2021-11-06 19:22php禁止网页抓取(
网页爬取编写网页需要使用的HTML语言(lxml)和解析)
网页抓取
您需要使用 HTML 语言来编写网页。如果你有HTML学习经验,就会知道所谓的HTML语言就是一种标准化的文档。有时我们可以很容易地从中获取一些需要的数据,并保留数据的原创格式,如csv、json等格式。但有时网站 并没有提供明确的数据格式。
所以我们需要爬网。网页抓取就是通过电脑程序编写,从不同的网页中进行删除和选择,挖掘出自己需要的数据,并以相应的格式保存数据。
网页请求(Requests)和解析(lxml)
lxml 模块是一个第三方包,可以快速高效地解析 XML 和 HTML 文档,甚至可以在解析网页的过程中处理一些错误使用的标签(标签)。其次,由于Python相关库数量多,更新速度快,对于原有的urllib2模块(python3版本不再支持urllib2,而是使用urllib),我们将使用可读性和性能更好的Requests模块反而。您可以通过以下命令轻松安装 pipinstalllxml 和 pipinstallrequests 这两个模块。
导入这些模块以开始编码之旅:
from lxml import html
import requests
接下来,我们使用 requests.get 请求一个收录我们的数据(例如 URL)的网页,然后使用 html 模块对其进行解析并将其保存在树中。
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)
(这里我们需要使用 page.content 而不是 page.text,因为使用 html.fromstring 意味着只接受字节格式的数据。)
tree 现在以简洁明了的树结构保存整个 HTML 文档,以便我们可以通过两种不同的方式对其进行解析:XPath 和 CSS。在这个例子中,我们将专注于前者。
XPath 是一种在结构化文档(如 HTML 和 XML)中定位信息的方法。您可以在 W3Schools 上了解有关 XPath 的更多信息。
有很多工具可以帮助获取XPath的元素,比如Firefox的FireBug(译者注:新版浏览器没有这个插件,只是查看元素)和谷歌Chrome的Chrome Inspector。如果您使用谷歌浏览器,您可以右键单击要获取的元素,选择检查元素,再次右键单击突出显示的代码,然后选择复制 XPath。
经过简短的分析,我们可以发现我们在网页中寻找的数据收录在两个元素中——一个是title属性为buyer-name的div标签,一个是class属性的span标签商品价格:
Carson Busses
$29.95
知道了这些之后,我们就可以使用XPath进行正确查询了,使用lxml模块的xpath函数,代码如下:
#创建 buyers 的列表:
buyers = tree.xpath('//div[@title="buyer-name"]/text()')
#创建 prices 的列表
prices = tree.xpath('//span[@class="item-price"]/text()')
让我们打印出来看看我们得到了什么:
print 'Buyers: ', buyers
print 'Prices: ', prices
Buyers: ['Carson Busses', 'Earl E. Byrd', 'Patty Cakes',
'Derri Anne Connecticut', 'Moe Dess', 'Leda Doggslife', 'Dan Druff',
'Al Fresco', 'Ido Hoe', 'Howie Kisses', 'Len Lease', 'Phil Meup',
'Ira Pent', 'Ben D. Rules', 'Ave Sectomy', 'Gary Shattire',
'Bobbi Soks', 'Sheila Takya', 'Rose Tattoo', 'Moe Tell']
Prices: ['$29.95', '$8.37', '$15.26', '$19.25', '$19.25',
'$13.99', '$31.57', '$8.49', '$14.47', '$15.86', '$11.11',
'$15.98', '$16.27', '$7.50', '$50.85', '$14.26', '$5.68',
'$15.00', '$114.07', '$10.09']
伟大的!我们已经成功地使用 lxml 和 Requests 模块从网页中抓取我们想要的数据并将它们存储在列表中。现在我们可以用这些数据做一些很酷的事情,比如用 Python 来分析它们,或者将它们保存在文件中并在互联网上共享。
你也可以考虑一些更酷的想法,比如如何写一个脚本来抓取其他页面上类似的数据集,或者尝试使用多线程重写这段代码以提高运行速度。
如果您想学习如何使用 Python 导入数据,这里的 DataCamp 导入数据课程是一个好的开始
此 文章 首次发布于 网站。
本翻译仅供学习交流之用,转载请务必注明译者、出处及本文链接
我们的翻译工作符合 CC 协议。如果我们的工作侵犯了您的权益,请及时与我们联系。