首頁  >  問答  >  主體

html - 为什么BeautifulSoup find_all 返回的list都不是按照网页显示顺序排序的?

我想爬糗百的段子,显示作者,和对应的段子,先只爬第一面

import requests
from bs4 import BeautifulSoup as bs
page = 1
url = "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 html
import requests
page = 1
url = "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的元素的顺序和网页显示顺序相同?

高洛峰高洛峰2741 天前584

全部回覆(1)我來回復

  • 大家讲道理

    大家讲道理2017-04-18 10:28:11

    應該是因為它頁面的內容的排序是在變動的。他的排序是根據評論裡面的個“好笑”數字來排的,好笑 數字接近的,順序變化正常,而且有時有新的段子加入這頁。你瀏覽器取得頁面的時間,和爬蟲爬取的時間不一樣,看到的段子順序不一樣很正常。

    回覆
    0
  • 取消回覆