Y小y 发表于 2021-1-13 11:25:45

为什么我只爬到第一行表头,如何才能爬到所有国家的呢?

#爬取世界各国疫情数据
import urllib.request as request
import io

def download(url:str):
    response = request.urlopen(url)
    textIOWrapper = io.TextIOWrapper(buffer=response,encoding="UTF-8")
    html=textIOWrapper.read()
    return html
url = "https://wp.m.163.com/163/page/news/virus_report/index.html?_nw_=1&_anw_=1"
html=download(url=url)

from bs4 import BeautifulSoup
FIELDS = ('name', 'today_confirm','confirm','dead','heal')# 定义要抓取的各列的标识
def bs_scraper(html):
    # parse the HTML
    soup = BeautifulSoup(html, features='html.parser')
    body = soup.find(name='body')
    results = {}
    div_1 = body.find_all(name='div', attrs={'class': 'overseas_list_nation'})
    print(div_1)
    for div in div_1:
      for field in FIELDS:
            div_2 = div.find(name='div', attrs={'class': 'overseas_list_%s' % field})
            results = div_2.text
    print(results)
    return results

bs_scraper(html)

YunGuo 发表于 2021-1-13 15:59:27

网页源代码没有数据,都是js动态加载的,你这样怎么可能爬的到?
疫情数据去爬这个接口:https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=322104795402

Daniel_Zhang 发表于 2021-1-13 16:40:22

YunGuo 发表于 2021-1-13 15:59
网页源代码没有数据,都是js动态加载的,你这样怎么可能爬的到?
疫情数据去爬这个接口:https://c.m.163. ...

大佬,我想问一下,你是如何获得到这个api的呢?求教{:10_275:}

Daniel_Zhang 发表于 2021-1-13 17:07:34

接着上面大佬给的 api,里面再每个国家/地区后头都会有一个 id 号

这里找到了另外一个 api,可以获取指定国家/地区每一天的数据(包含历史数据)

https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode=10

只需要把areaCode=后面的数字改成对应国家/地区的id就可以了。例如:中国的id为 0 那么 对应的 url 为 https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode=0
页: [1]
查看完整版本: 为什么我只爬到第一行表头,如何才能爬到所有国家的呢?