鱼C论坛

 找回密码
 立即注册
查看: 1263|回复: 7

[已解决]尝试爬取国家统计局数据

[复制链接]
发表于 2020-7-5 13:53:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
import bs4
import re
def open_url(url):
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
    res=requests.get(url,headers=headers)
    return res
def get_mes(res):
    soup=bs4.BeautifulSoup(res.text,'html.parser')
    targets=soup.find_all('tbody')
    print(targets)
    # for each in targets:
    #     print(each.text)

def main():
    url="http://data.stats.gov.cn/easyquery.htm?cn=E0101"
    res=open_url(url)
    get_mes(res)

if __name__=='__main__':
    main()
刚开始就遇到问题,我在爬取tbody里内容的时候,为什么爬取不到我需要的那个tbody?明明有两个tbody,为什么只爬取到后面那个,前面那个却没有呢?求指教
最佳答案
2020-7-5 21:07:01
看过了数据获取过程,是ajax获取,这个得细研究研究,恐怕没时间帮你了。不过可以说一下我看到的:
首先加载网页时,会得到一个json格式的数据,只是储存了默认当前页面的数据,具体数据与对应counter名称不得而知:
3.png
其次是每点击一个分支,就会触发一次AJAX查询,从而得到那个分支的数据:
4.png
另外注意每次查询的参数是不同的,应该也就是这个决定了查询的对象:
5.png

另外说ajax这个查法感觉比较麻烦,不如直接点那个下载按钮下载数据直接。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-5 13:59:39 | 显示全部楼层
是反爬机制嘛?我把整个网站下载下来也没有找到数据部分的内容 求指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 14:18:56 | 显示全部楼层
页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:
1.png 2.png

告诉我你真正要爬的数据内容吧,好让我们帮你分析如何处理动态加载。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 16:41:07 From FishC Mobile | 显示全部楼层
suchocolate 发表于 2020-7-5 14:18
页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:



你这个审查元素很清晰啊
跟 Chrome 有的一拼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 17:14:19 | 显示全部楼层
suchocolate 发表于 2020-7-5 14:18
页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:

就是像爬取网易云音乐评论那样放慢加载速度嘛?不太懂,老哥有推荐的相关学习视频嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 17:17:28 | 显示全部楼层
suchocolate 发表于 2020-7-5 14:18
页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:

因为以后写论文可能要用到这些数据 所以现在就想提前爬一下试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 18:12:03 | 显示全部楼层
suchocolate 发表于 2020-7-5 14:18
页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:

就比如我发的代码里的那个网址的数据,应该如何爬取呢?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 21:07:01 | 显示全部楼层    本楼为最佳答案   
看过了数据获取过程,是ajax获取,这个得细研究研究,恐怕没时间帮你了。不过可以说一下我看到的:
首先加载网页时,会得到一个json格式的数据,只是储存了默认当前页面的数据,具体数据与对应counter名称不得而知:
3.png
其次是每点击一个分支,就会触发一次AJAX查询,从而得到那个分支的数据:
4.png
另外注意每次查询的参数是不同的,应该也就是这个决定了查询的对象:
5.png

另外说ajax这个查法感觉比较麻烦,不如直接点那个下载按钮下载数据直接。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表