亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消