首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Request.html python在抓取网站时空img src

使用Request.html python在抓取网站时空img src
EN

Stack Overflow用户
提问于 2020-08-07 10:33:44
回答 1查看 421关注 0票数 0

当我使用Beautifulsoup和requests模块刮取imgsrc时,所有imgsrc都是空的,所以我假设src值是由JavaScript生成的。因此,我尝试使用requests_html模块。然而,当我试图在呈现响应后刮取相同的信息时,只有两个imgsrc有价值,其余的都是空的,但问题是,当我使用开发工具在网站上检查它时,其他img的src似乎应该有一个值。我能知道这里有什么问题吗?

bs4代码和请求

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests

biliweb = requests.get('https://www.bilibili.com/ranking/bangumi/13/0/3').text

bilisoup = BeautifulSoup(biliweb,'lxml')

for item in bilisoup.find_all('div',class_='lazy-img'):
    
    image_html = item.find('img')
    print(image_html)

requets_html代码

代码语言:javascript
复制
from requests_html import HTML, HTMLSession

session = HTMLSession()

biliweb =  session.get('https://www.bilibili.com/ranking/bangumi/13/0/3')
biliweb.html.render() 


for item in biliweb.html.find('.lazy-img.cover > img'):
    print(item.html)

我只会展示前五个结果,因为列表很长。

配美汤及要求

与requests_html

EN

回答 1

Stack Overflow用户

发布于 2020-08-07 11:42:51

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

下面的脚本将数据保存在json文件中。一旦你有了这个,你可以很容易地下载这些图像。

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
{'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': ....
...
...
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63300026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档