使用lxml爬取知乎问题数据 题目:使用selenium和lxml爬取知乎一个热门问题的标题和回答数,并将结果保存到zhihu.txt文件中。 https://www.zhihu.com/knowledge-plan/hot-question/hot/0/hour
时间: 2024-11-13 19:22:01 浏览: 23
知乎问题的爬取(保存到一个txt文件中).rar
5星 · 资源好评率100%
首先,你需要安装必要的Python库,包括`requests`, `selenium`, 和 `lxml`。Selenium用于模拟浏览器行为,而lxml则是一个强大的HTML解析库。以下是使用这两个库爬取知乎热门问题及其信息的基本步骤:
1. **安装依赖**:
```bash
pip install requests selenium lxml beautifulsoup4
```
2. **初始化**:
```python
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
# 设置Chrome无头模式
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=chrome_options)
```
3. **打开网页并获取HTML**:
```python
url = "https://www.zhihu.com/knowledge-plan/hot-question/hot/0/hour"
driver.get(url)
time.sleep(5) # 等待页面加载完成
html = driver.page_source
```
4. **解析HTML**:
使用lxml的`html.fromstring()`函数处理HTML内容,找到题目和回答数的数据:
```python
soup = BeautifulSoup(html, 'lxml')
title_element = soup.find('h2', class_='QuestionItem-title') # 找到问题标题
answer_count_element = soup.find('span', text='的回答') # 找到回答数部分
title = title_element.text if title_element else None
answers = int(answer_count_element.text.split('的回答')[0]) if answer_count_element else None
```
5. **保存数据**:
将数据写入文本文件:
```python
with open('zhihu.txt', 'w', encoding='utf-8') as f:
if title and answers:
f.write(f"问题标题: {title}\n回答数: {answers}\n")
else:
f.write("无法获取数据\n")
```
6. **关闭驱动**:
```python
driver.quit()
```
注意:由于知乎有反爬虫策略,这个例子可能在实际运行中遇到问题。为了尊重网站规定,建议使用官方API或其他授权方式获取数据。
阅读全文