为什么 requests-html 会部分返回内容?

why does requests-html return content partialy?

提问人:GayLord 提问时间:7/2/2023 最后编辑:GayLord 更新时间:7/2/2023 访问量:42

问:

我知道,这是因为内容是由 JS 渲染的,但 requests-html 支持 JS,所以这很奇怪

代码本身:

from requests_html import HTMLSession

session = HTMLSession()
session.browser
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36'
headers = {'User-Agent': user_agent}
r = session.get("https://readli.net/chitat-online/?b=439184&pg=1", headers = headers)
r.html.render(timeout = 13)
text = r.html.text
print(text)
html 解析 python-requests html-解析

评论

0赞 juanpethes 7/2/2023
我不认为那个网站上有那么多JavaScript。您要抓取哪些数据?
0赞 GayLord 7/2/2023
@juanpethes我正在尝试获取 P 标签中的文本
0赞 juanpethes 7/2/2023
请参阅我的答案以实现这一目标,并随时提出任何后续问题。

答:

0赞 juanpethes 7/2/2023 #1

用于解析 HTML 文档,我让它工作。这个模块可以更容易地获取 p 标签中的内容,这些标签分布在纯 HTML 中一堆嵌套的 <li>、<div> 等标签中。BeautifulSoup

因此,此代码获取第一页上 p 标签内的整个文本(如 URL 中指定)。(注意,我也使用了 instead of,但它应该是相同的 - 我只是没有安装。尝试用替换它,如果它不起作用,您至少知道您有一个解决方案)。&pg=1requestsrequests_htmlrequests_htmlrequests_htmlrequests

我使用语句的原因是会话在使用后会自动关闭。with

这是用换行符分隔打印出来,而不是简单地列出每个 p 标签的一长串。'\n'.join

from bs4 import BeautifulSoup
import requests

user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36'
headers = {'User-Agent': user_agent}

with requests.Session() as session:
    r = session.get(
        "https://readli.net/chitat-online/?b=439184&pg=1", 
        headers = headers,
    )

soup = BeautifulSoup(r.text, 'html.parser')
print('\n'.join(ptag.text for ptag in soup.find_all('p')))

我希望这会有所帮助。