html - 为什么BeautifulSoup find_all 返回的list都不是按照网页显示顺序排序的?
问题描述
我想爬糗百的段子,显示作者,和对应的段子,先只爬第一面
import requestsfrom bs4 import BeautifulSoup as bspage = 1url = 'http://www.qiushibaike.com/hot/page/'r = requests.get(url+str(page))soup = bs(r.content,'html.parser')names = []for n in soup.find_all('a',{'href':True,'target':True,'title':True}): names += [n.h2.get_text()]print(names)
print 结果:
[’威信红包接龙关注’, ’ZBZBZBZ’, ’养贼专业户’, ’柱流年’, ’大风起兮雪飞扬’, ’依然家的麦芽糖’, ’小小&妖精’, ’苍南下山耍流氓,黑衣格哥买红糖’, ’九妹妹~’, ’亲爱de橄榄绿’, ’有点胖的妮妮’, ’污奇奇’, ’没办法就是这么帅’, ’亦龙’, ’哇噻~桃宝’, ’单名一个饭字’, ’ni敢拿命疼我吗?’, ’许我三日暖’, ’半阙词曲丶’, ’谁动了我的粮食?’]
html.fromstring xpath 也这样
from lxml import htmlimport requestspage = 1url = 'http://www.qiushibaike.com/hot/page/'r = requests.get(url+str(page))tree = html.fromstring(r.content)print(tree.xpath(’//*[@class='article block untagged mb15']/p[1]/a[2]/h2/text()’))
print 结果:
[’威信红包接龙关注’, ’ZBZBZBZ’, ’养贼专业户’, ’大风起兮雪飞扬’, ’柱流年’, ’依然家的麦芽糖’, ’小小&妖精’, ’苍南下山耍流氓,黑衣格哥买红糖’, ’九妹妹~’, ’亲爱de橄榄绿’, ’有点胖的妮妮’, ’污奇奇’, ’没办法就是这么帅’, ’亦龙’, ’单名一个饭字’, ’ni敢拿命疼我吗?’, ’许我三日暖’, ’半阙词曲丶’, ’根@儿’, ’我是你的绝无仅有’]
但网页的实际显示顺序是:
[’威信红包接龙关注’, ’养贼专业户’, ’ZBZBZBZ’, ’柱流年’, ’有点胖的妮妮’, ’依然家的麦芽糖’, ’小小&妖精’, ’大风起兮雪飞扬’, ’苍南下山耍流氓,黑衣格哥买红糖’, ’九妹妹~’, ’亦龙’...]
如何让返回的list的元素的顺序和网页显示顺序相同?
问题解答
回答1:应该是因为它页面的内容的排序是在变动的。他的排序是根据评论里面的个“好笑”数来排的,好笑 数字接近的,顺序变化正常,而且有时有新的段子加入这页。你浏览器取得页面的时间,和爬虫爬取的时间不一样,看到的段子顺序不一样很正常。
相关文章:
1. Android 高德地图如何实现拖动平移地图时地图上的小图标不动?2. android - 求 360浏览器 百度浏览器 搜狗浏览器的最新启动类名3. 微信端电子书翻页效果4. javascript - 在html中写了个<video>视频,浏览器却是一片空白为什么呢?360浏览器?5. pdo_mysql 值自增写法6. css - 前端flex布局嵌套内层的布局不起作用?7. html5 - HTML代码中的文字乱码是怎么回事?8. javascript - 微信小程序 wx.downloadFile下载文件大小有限制吗9. 安装sublime text 3 控制台的时候出现这个报错怎么办?10. php laravel框架模型作用域