如何从html中提取数据

2024-04-18 22:31:44 发布

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

我试着使用beautifulsoup4和python来抓取某个网站。然而,当我试图从URL中查看内容时,它只给我一个标题部分,没有给我想要使用的主体部分

URL = "url"
URL_page = requests.get(URL)
print(URL_page.text)

这给了我

<!DOCTYPE html>
<html>
 <head>
"Contents of Header"
 </head>
  <body>
   <div id='root'></div>
  </body>
</html>

body标签中应该有内容,但没有显示任何内容。 此网页的原始html如下所示

<html xmlns:wb="http://open.weibo.com/wb" style> 
 ▶<head...</head>                     ← ONLY GIVES ME THIS
 ▶<body data-loaded="true">...</body> ← I NEED THIS PART
</html>

Tags: divurl标题内容网站htmlpagebody
3条回答

我想,你应该使用'user-agent'。你可以试试:

from bs4 import BeautifulSoup
import requests

headers =  {'User-Agent': 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0 '}
url = "https://www.pixiv.net/en/users/14792128"
response = requests.get(url,headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
print(soup.prettify())

不知道你到底想要什么,也不知道你想要什么作为输出。但是您可以从ajax访问json响应:

import pandas as pd
import requests

url='https://www.pixiv.net/ajax/user/14792128/profile/all?lang=en'

jsonData = requests.get(url).json()
data = jsonData['body']['mangaSeries']

df = pd.DataFrame(data)

如果没有有效的URL,很难提供有效的答案,但您的问题确实提供了一些线索

首先,您说您在GET的响应中收到了:

<body>

但是,您可以在web浏览器中看到:

<body data-loaded="true">

这表明页面运行JavaScript代码,在加载初始页面后继续加载和构建页面

没有办法用requestsbs4或类似的东西来回避这个问题。您可以检查初始页面加载之后有哪些请求包含实际内容(可能是另一段html、一些json等),并使用该请求获取内容。如果您想尝试这样做,请尝试在良好的浏览器中打开开发人员工具,并在加载页面时查看“网络”选项卡,您将看到所有请求,其中一个可能包含您要查找的内容

但是,如果在渲染后需要html,就像脚本渲染一样,可以尝试使用Python中支持JavaScript的浏览器,比如通过Selenium Chrome webdriver驱动的Chrome:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://your.url/here")
elem = driver.find_element_by_tag_name('body')
print(elem.text)

请注意,您需要安装Selenium,并需要获得相应驱动程序的副本,如chromedriver.exe。将其添加到您的虚拟环境:

相关问题 更多 >