为了账号安全,请及时绑定邮箱和手机立即绑定

使用BeautifulSoup和XPath抓取结构化数据

标签:
Python

仍然以糗事百科 http://www.qiushibaike.com/text/ 的段子数据抓取来说明。

结构化数据,就是对应一个数据块,编程中的一个对象,数据库中的一条记录。

结构化数据抓取的原则,循环点要放在包含整块数据标签处。即『先取大再取小』。

抓取数据字段:

  • 段子作者

  • 段子内容

  • 好笑数

  • 评论数

选取的循环点放在这个div上,使用class属性,不要使用id

<div class="article block untagged mb15" id='qiushi_tag_118966710'>

直接上代码。大家重点掌握 XPath�的方法。bs4的selector,还是 XPath,都是用Chrome工具来 copy ,再根据网页结构作一些调整。

一、使用BeautifulSoup

# coding=utf-8import requestsfrom bs4 import BeautifulSoup

user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"headers={"User-Agent":user_agent}  #请求头,headers是一个字典类型html = requests.get('http://www.qiushibaike.com/text/',headers=headers).content
soup = BeautifulSoup(html,'lxml')#注意以下注释的是不同的方法或定位,都可以#divs = soup.find_all('div',class_="article block untagged mb15")#divs = soup.select('div .article.block.untagged.mb15') # 注意这里 class属性中有空格,都转为.divs = soup.select('div.col1 > div')  # 这里是用从一层标签开始定位的。for div in divs:

    author =  div.select('div > a > img')    if author :        print author[0]['alt']


    content =  div.select('a > div > span')[0].text    print content

    funny =  div.select('div.stats > span.stats-vote > i')[0].text    print funny

    comment =  div.select('div.stats > span.stats-comments > a > i')[0].text    print comment

二、使用XPath

# coding=utf-8import requestsfrom lxml import etree

user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"headers={"User-Agent":user_agent}  #请求头,headers是一个字典类型html = requests.get('http://www.qiushibaike.com/text/',headers=headers).content

selector = etree.HTML(html)

divs = selector.xpath('//div[@class="article block untagged mb15"]')for div in divs:
    author = div.xpath('div[1]/a[2]/@title')    print author[0]

    content = div.xpath('a[1]/div/span/text()[1]')    print content[0]

    funny = div.xpath('div[2]/span[1]/i/text()')    print funny[0]

    comment = div.xpath('div[2]/span[2]/a/i/text()')    print comment[0]

以上数据只作了打印显示。



作者:向右奔跑
链接:https://www.jianshu.com/p/c8869de1c029


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消