打开Python爬虫实战练习页面requests库及lxml库入门_S01_Spiderbuf,看到页面上的内容是一个很简单的表格。
在页面上右键 -> 显示网页源代码,发现HTML源码也很简单。
我们就使用Python的requests库爬取网页,并使用lxml库来解析网页。
这两个库都不是Python的标准库,所以我们需要通过pip命令进行安装。
pip install requests
pip install lxml
在linux或者macOS环境中,因为区分了Python 2与3的版本,所以命令要带上版本号。
pip3 install requests
pip3 install lxml
有些小伙伴在使用PyCharm编写Python代码并运行时,即使在已经通过以上命令安装了相关的库,但还是遇到ModuleNotFoundError: No module named 'requests'这种问题,原因解决方法我在另外一篇文章里已经讲过了,在这就不重复了,遇到这种问题的可以去阅读一下《使用PyCharm写Python代码时遇到ModuleNotFoundError No module named 'xxx'》
编写基本的requests代码,先把网页爬取下来。
# coding=utf-8
import requests
from lxml import etree
url = 'https://www.spiderbuf.cn/playground/s01'
html = requests.get(url).text
print(html)
可以看到网页内容已经爬取下来了,接下来就开始对网页内容进行解析并获取到具体的数据。这里我们使用的是lxml库。
lxml是XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据。lxml和正则一样,也是用C语言实现的,是一款高性能的python HTML、XML解析器,也可以利用XPath语法,来定位特定的元素及节点信息。
这里我们使用xpath语法来解析。有很多人问过这样的问题:为什么不用Beautiful Soup?
其实这些都是工具,不用太纠结,哪个用得顺手用哪个就好了。用xpath是因为xpath的语法很灵活、很强大且能用性强,不受开发语言限制,也就是说不管你是用python写爬虫,还是用javascript写爬虫,或者用NodeJS写爬虫,甚至C/C++写爬虫,xpath都能用。
xpath有相对路径跟绝对路径,如果使用绝对路径我们就需要一层一层准确地定位到我们想要的元素,比较麻烦,相对路径就稍微简单一点,但复杂页面用相对路径可以会带上一些不需要的信息,要根据实际情况进行取值。
root = etree.HTML(html)
trs = root.xpath('//tr')
以上是把爬取下来的网页进行解析,并使用相对路径//tr获取table的每一行,返回的是一个数组,然后遍历数据,再提取每个单元格td的文本即可。
for tr in trs:
tds = tr.xpath('./td')
for td in tds:
print(td.text)
做爬虫开发需要对HTML、CSS、JavaScript、xpath、HTTP协议、Development Tools协议、浏览器开发者工具、抓包工具等有一定的了解。想要深入了解爬虫与反爬虫的攻防以及调试方法,可以了解一下我的相关课程,该课程通过自己编写网站,做反爬与爬虫,并通过抓包软件等方式讲解了爬虫与反爬虫的爱恨情仇。
Udemy:《深入了解Python爬虫攻防》
完整示例代码:示例代码