源代码格式相同的页面为什么爬虫抓取的数据数目不同?

1 在翻页爬取不同页面的数据时,发现每页的源代码是相同的,但是用同一个抓取方法抓取的数据为什么个数不同,有的是全部的40条,有的只有29条。不知道是反爬虫的原因还是怎么回事,求指教。

2 代码如下:

import time
import re
import requests
import random
from bs4 import BeautifulSoup

url1 = 'http://yanbao.stock.hexun.com/listnews1_1.shtml'
url2 = 'http://yanbao.stock.hexun.com/listnews1_2.shtml'
url3 = 'http://yanbao.stock.hexun.com/listnews1_3.shtml'
info = requests.get(url1).content
soup = BeautifulSoup(info,'lxml')

stock = [i.string.split(':')[0] for i in soup.find_all('a',class_ = 'fxx_wb')]

print(len(stock))

抓取的元素是红色部分,即股票的代码

clipboard.png

3 结果:在url1和url2中都能抓40条(全部数目),在url3只有29,其余的有些是40,也有很大一部分小于40,自己观察了一下好像代码格式都是相同的,但是为什么出现这种情况,请问原因,和如何处理? 谢谢

阅读 4.5k
2 个回答

个人猜测的话可能是ajax的异步加载导致的,可能程序执行的太快,一些数据值返回了,一些还在加载。
有些网站点击下一页是整个刷新界面,有些只是刷新下一页数据,页面其他元素并不改变,不知道你抓的网页是什么情况。

import requests
from pyquery import PyQuery as Q

urls = [
    'http://yanbao.stock.hexun.com/listnews1_1.shtml',
    'http://yanbao.stock.hexun.com/listnews1_2.shtml',
    'http://yanbao.stock.hexun.com/listnews1_3.shtml'
]

for url in urls:
    r = requests.get(url)
    q = Q(r.text)
    lst = [q(_).text().split(':')[0] for _ in q('table.tab_cont a.fxx_wb')]
    print lst
    
    

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题