今天的我更强了 发表于 2020-7-5 13:53:42

尝试爬取国家统计局数据

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 13:59:39

是反爬机制嘛?我把整个网站下载下来也没有找到数据部分的内容 求指点

suchocolate 发表于 2020-7-5 14:18:56

页面html部分是event触发的(得动态加载),所以直接get是只能拿到一个:


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

_2_ 发表于 2020-7-5 16:41:07

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




你这个审查元素很清晰啊
跟 Chrome 有的一拼

今天的我更强了 发表于 2020-7-5 17:14:19

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




就是像爬取网易云音乐评论那样放慢加载速度嘛?不太懂,老哥有推荐的相关学习视频嘛?

今天的我更强了 发表于 2020-7-5 17:17:28

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




因为以后写论文可能要用到这些数据 所以现在就想提前爬一下试试看

今天的我更强了 发表于 2020-7-5 18:12:03

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




就比如我发的代码里的那个网址的数据,应该如何爬取呢?谢谢

suchocolate 发表于 2020-7-5 21:07:01

看过了数据获取过程,是ajax获取,这个得细研究研究,恐怕没时间帮你了。不过可以说一下我看到的:
首先加载网页时,会得到一个json格式的数据,只是储存了默认当前页面的数据,具体数据与对应counter名称不得而知:

其次是每点击一个分支,就会触发一次AJAX查询,从而得到那个分支的数据:

另外注意每次查询的参数是不同的,应该也就是这个决定了查询的对象:


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

页: [1]
查看完整版本: 尝试爬取国家统计局数据