前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫入门(二)解析源码

Python爬虫入门(二)解析源码

作者头像
小歪
发布2018-04-04 12:07:08
1.2K0
发布2018-04-04 12:07:08
举报
上一期讲了如何获取网页源码的方法,这一期说一说怎么从其中获得我们需要的和数据。

解析网页的方法很多,最常见的就是BeautifulSoup和正则了,其他的像xpath、PyQuery等等,其中我觉得最好用的就是xpath了,xpath真的超级简单好用,学了之后再也不想取用美丽汤了。下面介绍xpath的使用方法。

首先需要安装lxml,windows下安装lxml是个大坑,知乎上有人给出了解决方法Python LXML模块死活安装不了怎么办?(https://www.zhihu.com/question/30047496)

详细的用法可以参考爬虫入门到精通-网页的解析(xpath)(https://zhuanlan.zhihu.com/p/25572729)

在这里我们尝试使用xpath来迅速获取数据。

例如想要获熊猫直播虎牙直播(http://www.huya.com/g/lol)下主播的ID

代码语言:javascript
复制
import requests
from lxml import etree

url = 'http://www.huya.com/g/lol'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
res = requests.get(url,headers=headers).text
s = etree.HTML(res)
print(s.xpath('//i[@class="nick"]/text()'))

输出:

下面一步步讲解为什么这样做。

代码语言:javascript
复制
import requests
from lxml import etree

首先是导入模块,requests很常见,但是xpath需要from lxml import etree,你肯点想问为什么这样写,回答是“我也不知道”,就像是约定俗成的东西一样。

代码语言:javascript
复制
url = 'http://www.huya.com/g/lol'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
res = requests.get(url,headers=headers).text

这三步就是平常获取源码的过程,很简单。

代码语言:javascript
复制
s = etree.HTML(res)

给一个html,返回xml结构,为什么这样写??答案和上面一样。最重要的就是下面的这一步:

代码语言:javascript
复制
s.xpath('//i[@class="nick"]/text()')

按下F12看到“爱拍-古手羽”在i标签下,接着我们右键打开“查看网页源代码”,搜索“爱拍-古手羽”

确实找到了“爱拍-古手羽”就在i标签下,那我们就把他提出来吧!

s.xpath('//i[@class="nick"]/text()')

这个段代码意思是,找到class为“nick”的i标签,返回其中的文本信息,当然你也可以返回i标签中的title,写法如下:

s.xpath('//i[@class="nick"]/@title')

text()返回的是文本信息,@title则是标签里面的具体属性的值,例如我想知道观众人数

代码语言:javascript
复制
import requests
from lxml import etree

url = 'http://www.huya.com/g/lol'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
res = requests.get(url,headers=headers).text
s = etree.HTML(res)
print(s.xpath('//i[@class="js-num"]/text()'))

只需在原来基础上修改一个属性,i标签class为“js-num”里面的值

代码语言:javascript
复制
print(s.xpath('//i[@class="js-num"]/text()'))

返回结果是:

说明:在运行代码中,发现虎牙反爬虫做得挺好的,瞬间就识别爬虫身份并封了IP,所以我换了IP去访问,至于如何设置代理,在我的上一篇文章中有说到,去看看吧。

在实际操作中,你可能会遇到更加复杂的情况,所以一定记得去看看详细的教程。爬虫入门到精通-网页的解析(xpath)(https://zhuanlan.zhihu.com/p/25572729)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档