php抓取网页匹配url( 小编来一起学习学习吧目录爬虫如何解析网页呢)
优采云 发布时间: 2022-02-27 19:07php抓取网页匹配url(
小编来一起学习学习吧目录爬虫如何解析网页呢)
Python爬虫初学者学习lxml库的初学者
更新时间:2020-12-20 16:50:42 作者:Java劝阻老师,
本文章主要介绍Python爬虫初学者学习lxml库的相关资料。文章中对示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考和学习价值。需要的小伙伴一起来和小编一起学习吧
内容
1.什么是爬虫
所谓爬虫,就是按照一定的规则,自动从网络中抓取信息的程序或脚本。万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的蜘蛛,不断地抓取我们需要的信息。
2.爬虫三要素3.爬虫流程分析
当一个人去访问一个网页时,它是如何工作的?
①打开浏览器,输入要访问的URL,发起请求。
②等待服务器返回数据,通过浏览器加载网页。
③ 从网页中找到您需要的数据(文字、图片、文件等)。
④保存您需要的数据。
爬行动物也是如此。它模仿人类请求网页的过程,但略有不同。
首先,对应上面的步骤①和②,我们需要使用python来实现请求网页的功能。
其次,对应上面的步骤③,我们需要使用python来实现解析请求网页的功能。
最后,对于上面的第4步,我们需要使用python来实现保存数据的功能。
因为是关于一个简单的爬虫,其他一些复杂的操作这里就不多说了。下面,对以上功能一一进行分析。
4.如何用python请求网页
作为具有丰富类库的编程语言,使用python请求网页是完全容易的。这里推荐一个非常有用的类库 urllib.request。
4.1. 爬网
urllib 库使用
import urllib.request
response = urllib.request.urlopen('https://laoniu.blog.csdn.net/')
print(response.read().decode('utf-8'))
这会爬取csdn我主页的html文档
我们使用爬虫从网页中提取我们需要的数据。接下来,我们来学习抓取百度搜索页面的热榜数据。
4.2.如何解析网页
使用 lxml 库
lxml 是一个用 Python 编写的库,用于快速灵活地处理 XML 和 HTML。
它支持 XML 路径语言 (XPath) 和可扩展样式表语言转换 (XSLT),并实现通用的 ElementTree API。
安装
windows下安装
#pip方式安装
pip3 install lxml
#wheel方式安装
#下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
pip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl
linux下安装
yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
pip3 install lxml
环境/版本列表:
4.3.写代码
import urllib.request
from lxml import etree
# 获取百度热榜
url = "https://www.baidu.com/s?ie=UTF-8&wd=1"
# 我们在请求头加入User-Agent参数,这样可以让服务端认为此次请求是用户通过浏览器发起的正常请求,防止被识别为爬虫程序请求导致直接拒绝访问
req = urllib.request.Request(url=url, headers={
'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
})
# 发起请求
html_resp = urllib.request.urlopen(req).read().decode("utf-8")
到这里我们就可以成功获取到百度搜索页面的html文档了
我们需要看看热搜排名的标签元素在哪里
找到第一个右键复制XPath(后面是什么XPath)
我们需要了解和使用 XPath。XPath 是 XML 路径语言,它是一种用于确定 XML 文档的某个部分的位置的语言。
复制内容的结果是://*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1]
这个xPath字符串表示当前在html中的位置是热点新闻的第一行
5.XPath 常用规则
表达
描述
节点名
选择该节点的所有子节点
/
从当前节点中选择直接子节点
//
从当前节点中选择后代节点
.
选择当前节点
..
选择当前节点的父节点
@
选择属性
*
通配符,选择所有元素节点和元素名称
@*
选择所有属性
[@attrib]
选择具有给定属性的所有元素
[@attrib='价值']
为给定属性选择具有给定值的所有元素
[标签]
选择具有指定元素的所有直接子元素
[标签='文本']
选择具有指定元素且文本内容为文本的所有节点
6.继续分析
那么我们应该如何写作才能得到所有的热点新闻呢?
继续看页面
可以看到所有的热榜都在三个以下
修改刚才复制的 XPath
//*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1] 到 //*[@id="con-ar"]/ div [2]/div/div/table/tbody/tr
这样XPath就会定位到这三个tbody下的所有tr元素内容
我们继续看看tr是不是我们想要的,展开一个tr看看
gan~还有一堆,
这个怎么做。我们需要获取的数据是【Title】【访问链接】【Hotness】,现在我们手上所有的tr元素
然后直接从tr开始获取下面所有标签的标题和超链接
标题的 XPath:*/a/@title 超链接的 XPath:*/a/@href
* 表示匹配tr下的所有元素/a中找到*第一个a标签@是属性选择器标题,href是要选择的元素属性
还有余热,我继续操作,直接选择tr下的第二个td XPath:td[2]
分析完成后粘贴完整代码
import urllib.request
from lxml import etree
# 获取百度热榜
url = "https://www.baidu.com/s?ie=UTF-8&wd=1"
# 我们在请求头加入User-Agent参数,这样可以让服务端认为此次请求是用户通过浏览器发起的正常请求,防止被识别为爬虫程序请求导致直接拒绝访问
req = urllib.request.Request(url=url, headers={
'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
})
html_resp = urllib.request.urlopen(req).read().decode("utf-8")
html = etree.HTML(html_resp)#初始化生成一个XPath解析对象
_list = html.xpath("//*[@id='con-ar']/div[2]/div/div/table/tbody/tr")
print(f"article count : {len(_list)}")
for tr in _list:
title = tr.xpath("*/a/@title")[0]
href = tr.xpath("*/a/@href")[0]
hot = tr.xpath("string(td[2])").strip()
print(f"{hot}\t{title}\thttps://www.baidu.com{href}")
点击运行,程序开始运行,很快,数据全部结束,我都抓到了,我笑了。
至此,lxml xpath的基本使用已经完成。有关更详细的 xpath 教程,请参阅:
爬虫的三要素,数据抓取完成,剩下的分析和存储就不讨论了
总结
这是文章关于Python爬虫初学者学习lxml库的介绍。更多关于Python爬虫入口的lxml库请搜索脚本之家之前的文章或继续浏览以下相关文章希望大家以后多多支持脚本之家!