爬爬爬--xpath

17 篇文章 0 订阅
1 篇文章 0 订阅

获取静态网页数据时,可以选择使用xpath,Beautifulsoup来提高工作效率

XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法: 

首先讲一下XPath的基本语法知识: 
四种标签的使用方法 
1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。 
2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作 
3) /text() 获取当前路径下的文本内容 
4) /@xxxx 提取当前路径下标签的属性值 
5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。 
6) . 点 用来选取当前节点 
7) .. 双点 选取当前节点的父节点 
列一个常用的匹配规则://title[@lang='eng']

了解基本规则,动手试试:

>>> html = requests.get("http://bbs.tianya.cn/list-lookout-1.shtml", 'User-Agent').text #构建请求,获取response,这没什么好说的
>>> html = etree.HTML(html) 
>>> type(html)
<class 'lxml.etree._Element'>


for all_data_div in all_data_div_list:
    etree_obj = etree.HTML(str(all_data_div))
    url = etree_obj.xpath('//div[@class="atl-item"]/div/div[2]/span/a/@href')
    uid = etree_obj.xpath('//div[@class="atl-item"]/div/div[2]/span/a/@uid')
    uname = etree_obj.xpath('//div[@class="atl-item"]/div/div[2]/span/a/@uname')
    post_time = etree_obj.xpath('//div[@class="atl-item"]/div/div[2]/span[2]/text()')
    content = [content.strip() for content in etree_obj.xpath('//div[@class="bbs-content"]/text()')]
    like_num = etree_obj.xpath('//div[@class="atl-reply"]/span[@class="tuijian"]/a/@_count')
    replyid = etree_obj.xpath('//div[@class="atl-item"]/@replyid')
    reply_list = etree_obj.xpath('//div[@class="ir-list"]/ul/li/span[@class="ir-content"]/text() | //div[@class="ir-list"]/ul/li/p/a[1]/@href | //div[@class="ir-list"]/ul/li/@_userid |//div[@class="ir-list"]/ul/li/@_username|//div[@class="ir-list"]/ul/li/p/span[2]/text()')
    print(url,uid,uname,post_time,content,replyid,reply_list)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值