使用requestshtml python抓取网站时清空img src

2024-09-30 03:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

bs4和请求的代码

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)

请求代码\u html

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)

我将只显示前五个结果,因为列表相当长

With Beautifulsoup and requests

<;img alt=“Re:从零开始的异世界生活 第二季" src=“”/>;
<;img alt=”刀剑神域 爱丽丝篇 异界战争 -终章-“src=”“/> <;img alt=”没落要塞 / 颓废“src=”“/> <;img alt=”某科学的超电磁炮T“src=”“/>;
<;img alt=”宇崎学妹想要玩!“src=”“/>

With requests_html

<;img alt=“Re:从零开始的异世界生活 第二季“src=”https://i0.hdslb.com/bfs/bangumi/image/f2425cbdb07cc93bd0d3ba1c0099bfe78f5dc58a.png@90w_120h.webp”/>;
<;img alt=”刀剑神域 爱丽丝篇 异界战争 -终章-“src=”https://i0.hdslb.com/bfs/bangumi/image/54d9ca94ca84225934e0108417c2a1cc16be38fb.png@90w_120h.webp”/>;
<;img alt=”没落要塞 / 颓废“src=”“/> <;img alt=”某科学的超电磁炮T“src=”“/>;
<;img alt=”宇崎学妹想要玩!“src=”“/>


Tags: httpsimageimportltgtsrccomimg
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:02

所有数据都存储在名为__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': ....
...
...
...

相关问题 更多 >

    热门问题