仍然以糗事百科 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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦