r = requests.get( ) 无法得到网页源代码中所有内容?

希望得到网站上所有的研报的摘要信息: http://zqyjbg.com/resinfo/info/viewResComQuery.html?flag…
关注者
7
被浏览
18,888

1 个回答

我来简单回答一下题主的问题吧...首先,我通过题主给的外链访问目标网页,打开的时候你需要的数据的地方是 空白 。如果人手动访问都是空白,那么 很可能不是你的程序问题 ,很可能是目标网站的某种 策略 。按道理说,这种情况它识别你是不是爬虫,一般根据 header 信息,要么就直接用 JS 动态生成中间这段内容。我以为是网站问题,再点了一下“宏观经济”,发现有数据,这个时候去点击“公司研究”,发现也有数据了,请求第二页、第三页都有数据。然后我打开抓包工具,随便抓了一页,发现并没请求什么JS代码,那这种情况还好,它并没通过JS控制信息的展示。嗯。我通过题主的代码跑了一下,确实返回的没有想要的数据,然后我把这个URL拿到一个新打开的浏览器访问了一下,结果发现居然没数据。但是如果我们 先点击了左边那些大的导航栏,然后再点击分页就可以请求到数据了 。是不是发现啥端倪了?没错,这个 左边的导航栏就是请求的入口 。通过访问左边的导航栏,再访问你想要的即可,以“公司研究”为例,导航栏的url为“

zqyjbg.com/resinfo/list

”,直接访问这个是可以拿到第一页的数据的,然后就可以接着请求到别的页码数据了。注意一点要 用requests.session()来维护目标站点的cookie ,否则请求还是无效。道理应该懂吧,我就不啰嗦了。下面是代码,我试过了,可行的。

# -*- encoding:utf-8 -*-
python:3.5.1
author:resolvewang
import requests
# 这一步是必须的,否则第二次请求仍返回空
session = requests.session()
url = 'http://zqyjbg.com/resinfo/listCom-2.html'
url2 = 'http://zqyjbg.com/resinfo/info/viewResComQuery.html?flag=flag_2&pageQuery=true&pageNum=2'
# headers在这里不必须,嗯,还是加上吧...
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0",
            'host': 'zqyjbg.com',
            'Accept-Language': 'zh-CN,zh;q=0.8',
            'Accept-Encoding': 'gzip, deflate, sdch',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',