使用request-html python抓取网站时为空img src

时间:2020-08-07 10:33:44

标签: python beautifulsoup python-requests python-requests-html

当我使用Beautifulsoup and请求模块来刮除img的{​​{1}}时,所有src s img为空,因此我假设src值是由JavaScript生成的。因此,我尝试改用requests_html模块。但是,当我尝试在呈现响应后抓取相同的信息时,src的{​​{1}}中只有两个具有值,其余的为空,但是问题是当我在网站使用开发人员工具,似乎其他img的src应该有一个值。我可以知道这是什么问题吗?

bs4和请求的代码

src

requets_html的代码

img

我只显示前五个结果,因为列表很长

使用Beautifulsoup和请求

“回复:从零开始的异世界生活第二季”
“刀剑神域爱丽丝篇异界战争-终章-”
“没落要塞/
“某科学的超电磁炮T”
“宇崎学妹想要玩!”

使用requests_html

“回复:从零开始的异世界生活第二季”
“刀剑神域爱丽丝篇异界战争-终章-”
“没落要塞/
“某科学的超电磁炮T”
“宇崎学妹想要玩!”

1 个答案:

答案 0 :(得分:0)

所有数据都存储在一个名为__INITIAL_STATE__的javascript变量中。

以下脚本将数据保存在json文件中。有了这些,就可以轻松下载图像。


import requests, json
from bs4 import BeautifulSoup

page = requests.get('https://www.bilibili.com/ranking/bangumi/13/0/3')
soup = BeautifulSoup(page.content, 'html.parser')

script = None
for s in soup.find_all("script"):
    if "__INITIAL_STATE__" in s.text:
        script = s.get_text(strip=True)
        break

data = json.loads(script[script.index('{'):script.index('function')-2])

with open("data.json", "w") as f:
    json.dump(data, f)

print(data)

输出:

{'rankList': [{'badge': '会员抢先', 'badge_info': {'bg_color': '#FB7299', 'bg_color_night': '#BB5B76', 'text': '会员抢先'}, 'badge_type': 0, 'copyright': 'bilibili', 'cover': 'http://i0.hdslb.com/bfs/bangumi/image/f2425cbdb07cc93bd0d3ba1c0099bfe78f5dc58a.png', 'new_ep': {'cover': 'http://i0.hdslb.com/bfs/archive/2f5bf4840747fc7c09932d2793e96a178cd05905.jpg', 'index_show': '更新至第5话'}, 'pts': 1903981, 'rank': 1, 'season_id': 33802, 'stat': {'danmaku': 814356, 'follow': 7135303, 'series_follow': 7267882, 'view': 33685387}, 'title': 'Re:从零开始的异世界生活 第二季', 'url': 'https://www.bilibili.com/bangumi/play/ss33802', 'pic': 'http://i0.hdslb.com/bfs/bangumi/image/f2425cbdb07cc93bd0d3ba1c0099bfe78f5dc58a.png', 'play': 33685387, 'video_review': 814356}, {'badge': '会员抢先', 'badge_info': {'bg_color': '#FB7299', 'bg_color_night': '#BB5B76', 'text': '会员抢先'}, 'badge_type': 0, 'copyright': 'bilibili', 'cover': 'http://i0.hdslb.com/bfs/bangumi/image/54d9ca94ca84225934e0108417c2a1cc16be38fb.png', 'new_ep': {'cover': 'http://i0.hdslb.com/bfs/archive/a772451f1f031ee1a3b78e31e4fb0b851517817f.jpg', 'index_show': '更新至第16话'}, 'pts': 483317, 'rank': 2, 'season_id': 32781, 'stat': {'danmaku': 514174, 'follow': 6195736, 'series_follow': 6733547, 'view': 36351270}, 'title': '刀剑神域 爱丽丝篇 异界战争 -终章-', 'url': 'https://www.bilibili.com/bangumi/play/ss32781', 'pic': 'http://i0.hdslb.com/bfs/bangumi/image/54d9ca94ca84225934e0108417c2a1cc16be38fb.png', 'play': 36351270, 'video_review': 514174}, {'badge': '会员抢先', 'badge_info': {'bg_color': '#FB7299', 'bg_color_night': '#BB5B76', 'text': '会员抢先'}, 'badge_type': 0, 'copyright': 'bilibili', 'cover': 'http://i0.hdslb.com/bfs/bangumi/image/d5d7441c20614dc5ddc69f333f1906a09eddcee2.png', 'new_ep': {'cover': 'http://i0.hdslb.com/bfs/archive/fe191e9ffa2422103bffcd8615446f5885074c0b.jpg', 'index_show': '更新至第5话'}, 'pts': 455170, 'rank': 3, 'season_id': 33803, 'stat': ....
...
...
...