response = requests.get(url, headers=headers) print(response.text)python中返回的XPath 比游览器查询少
时间: 2025-06-22 17:44:38 浏览: 8
### 解决 Python `requests` 库获取网页内容时返回的 XPath 结果比浏览器查询少的问题
当使用 Python 的 `requests` 获取网页内容并应用 XPath 提取数据时,可能会遇到提取的结果不如通过浏览器查询多的情况。这通常是因为页面的部分内容由 JavaScript 动态加载而 `requests` 只能抓取静态 HTML。
为了处理这种情况,可以考虑以下几种方法:
#### 方法一:使用 Scrapy 和 Splash
Scrapy 使用 XPath 来选择和抽取网页中的元素[^1]。然而对于动态加载的内容,仅靠 Scrapy 并不足以解决问题。此时可引入 Splash 这样的工具来渲染 JavaScript 加载后的页面再进行解析。
```python
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.com']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url, callback=self.parse)
def parse(self, response):
# 此处response已经包含了JavaScript执行完毕之后的数据
items = response.xpath('//div[@class="item"]').getall()
```
#### 方法二:Selenium WebDriver
另一种解决方案是采用 Selenium WebDriver 实现自动化浏览器操作,它能够完全模拟真实用户的浏览行为,从而确保所有 JavaScript 脚本被执行完成后再读取 DOM 数据。
```python
from selenium import webdriver
from lxml import etree
driver = webdriver.Chrome() # 或者其他支持的浏览器驱动
driver.get('http://example.com')
html_content = driver.page_source
tree = etree.HTML(html_content)
items = tree.xpath('//div[@class="item"]')
print(items)
driver.quit()
```
这两种方式都可以有效应对由于 JavaScript 渲染造成的差异问题。如果目标网站不涉及复杂的交互逻辑,则推荐优先尝试第一种方案;而对于更复杂场景下的爬虫需求来说,第二种基于 Selenium 的实现或许更为合适。
阅读全文
相关推荐














import re
import requests
from lxml import etree
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
# 定义小说首页地址
index_url = 'https://www.biquge11.cc/read/12972/'
# 发送网络请求
response = requests.get(index_url, headers=headers)
# 筛选链接和标题
info_list = re.findall('(.*?) ', response.text)
# 去除前面6个数据
info_list = info_list[6:]
# 遍历列表,得到每章的部分链接和标题
for info in info_list:
# 从元组中取出部分链接进行拼接,获取每章的页面链接
url = 'https://www.biquge11.cc' + info[0]
# 获取数据
response = requests.get(url, headers=headers)
html_data = etree.HTML(response.text)
# xpath筛选出文本数据,并将数据列表转换成字符串
text_list = html_data.xpath('//div[@id="chaptercontent"]/text()')
text = ''.join(text_list)
# 添加标题行
book_text = '\n\n' + info[1] + '\n\n'
# 去除广告文本
book_text += text.replace('请收藏本站:https://www.biquge11.cc。笔趣阁手机版:https://m.biquge11.cc ', '').replace(' ', '\n')
print("正在下载:" + info[1])
print(book_text)
# 保存到文件
with open('斗破苍穹.txt', 'a', encoding='utf-8') as file:
file.write(book_text)
只有目录,没有内容




