[英]How to Extract the data from html
我试图使用 beautifulsoup4 和 python 来抓取某个网站。 但是,当我试图查看 URL 的内容时,它只给了我一个 header 部分,并没有给我一个我想使用的身体部分。
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>
正文标签内应该有内容,但它什么也不显示。 这个 web 页面的原始 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>
如果没有有效的 URL,很难提供有效的答案,但您的问题确实提供了一些线索。
一方面,你说你在 GET 的响应中收到了这个:
<body>
但随后您在 web 浏览器中看到:
<body data-loaded="true">
这表明该页面运行了 JavaScript 代码,该代码在初始页面加载后继续加载和构建页面。
没有办法使用requests
或bs4
或类似的东西来解决这个问题。 您可以检查具有实际内容的初始页面加载之后的请求(它可能是另一块 html、一些 json 等)并使用该请求来获取内容。 如果您想尝试,请尝试在良好的浏览器中打开开发人员工具,并在页面加载时查看网络选项卡,您将看到所有请求,其中一个可能包含您所追求的内容。
But if you need the html after rendering, as rendered by the script, you can try using a JavaScript capable browser from Python, like Chrome driven through the Selenium Chrome webdriver:
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
。 将其添加到您的虚拟环境中:
pip install selenium
我认为,您应该使用'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())
不知道您究竟想要什么作为 output。 但是您可以访问来自 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.