题目
使用Selenium模拟浏览器访问京东首页(网址https:/item.jd.com/),爬取京东网站商品的评价。例如,搜索“口罩”,获取100页相关商品信息,获取每个商品的全部评价,并保存到本地TXT文件中,每个商品的评价信息保存为一个文件。请输人答案限制单个文件大小[1]不超过50M,文件数量5个以内,支持格式jpg、jpeg、gif、png、doc、docx、xls、xlsx、ppt、pptx、pdf、mp3、mp4、zip、rar等
使用Selenium模拟浏览器访问京东首页(网址https://item.jd.com/),爬取京东网站商品的评价。例如,搜索“口罩”,获取100页相关商品信息,获取每个商品的全部评价,并保存到本地TXT文件中,每个商品的评价信息保存为一个文件。
请输人答案
限制单个文件大小[1]不超过50M,文件数量5个以内,支持格式jpg、jpeg、gif、png、doc、docx、xls、xlsx、ppt、pptx、pdf、mp3、mp4、zip、rar等
题目解答
答案
要使用Selenium模拟浏览器访问京东首页并爬取商品评价,可以按照以下步骤进行。这里假设你已经安装了Selenium和ChromeDriver,并且有基本的Python编程知识。
### 1. 安装必要的库
首先,确保你已经安装了Selenium和ChromeDriver。可以使用以下命令安装Selenium:
```bash
pip install selenium
```
### 2. 编写爬虫代码
以下是一个示例代码,展示了如何使用Selenium爬取京东商品的评价信息,并保存到本地TXT文件中。
```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import os
# 配置ChromeDriver路径
chrome_driver_path = 'path/to/chromedriver'
# 初始化浏览器
driver = webdriver.Chrome(executable_path=chrome_driver_path)
# 访问京东首页
driver.get('https://www.jd.com')
# 搜索“口罩”
search_box = driver.find_element(By.ID, 'key')
search_box.send_keys('口罩')
search_box.send_keys(Keys.RETURN)
# 等待页面加载
time.sleep(5)
# 创建保存评价的目录
if not os.path.exists('jd_reviews'):
os.makedirs('jd_reviews')
# 获取100页商品信息
for page in range(1, 101):
print(f'正在爬取第 {page} 页...')
# 获取商品列表
items = driver.find_elements(By.CLASS_NAME, 'gl-item')
for item in items:
try:
# 获取商品链接
product_link = item.find_element(By.CLASS_NAME, 'p-name').find_element(By.TAG_NAME, 'a').get_attribute('href')
# 访问商品详情页
driver.get(product_link)
time.sleep(5)
# 获取商品ID
product_id = product_link.split('/')[-1].split('.')[0]
# 切换到评价标签
review_tab = driver.find_element(By.ID, 'detail-tab-3')
review_tab.click()
time.sleep(5)
# 获取评价信息
reviews = driver.find_elements(By.CLASS_NAME, 'comment-item')
# 保存评价信息到文件
with open(f'jd_reviews/{product_id}.txt', 'w', encoding='utf-8') as f:
for review in reviews:
content = review.find_element(By.CLASS_NAME, 'comment-content').text
f.write(content + '\n')
# 返回搜索结果页
driver.back()
time.sleep(5)
except Exception as e:
print(f'爬取商品 {product_id} 时发生错误: {e}')
continue
# 翻页
next_button = driver.find_element(By.CLASS_NAME, 'pn-next')
next_button.click()
time.sleep(5)
# 关闭浏览器
driver.quit()
```
### 3. 代码解析
1. **初始化浏览器**:使用`webdriver.Chrome`初始化Chrome浏览器,并指定ChromeDriver的路径。
2. **访问京东首页**:使用`driver.get`方法访问京东首页。
3. **搜索“口罩”**:找到搜索框,输入“口罩”并提交搜索。
4. **等待页面加载**:使用`time.sleep`等待页面加载完成。
5. **创建保存评价的目录**:使用`os.makedirs`创建保存评价的目录。
6. **获取100页商品信息**:使用`for`循环遍历100页商品信息。
7. **获取商品列表**:使用`find_elements`方法获取商品列表。
8. **访问商品详情页**:遍历每个商品,获取商品链接并访问商品详情页。
9. **获取商品ID**:从商品链接中提取商品ID。
10. **切换到评价标签**:找到评价标签并点击。
11. **获取评价信息**:使用`find_elements`方法获取评价信息。
12. **保存评价信息到文件**:将评价信息写入到本地TXT文件中。
13. **返回搜索结果页**:使用`driver.back`方法返回搜索结果页。
14. **翻页**:找到下一页按钮并点击。
15. **关闭浏览器**:使用`driver.quit`方法关闭浏览器。
### 4. 注意事项
1. **反爬虫机制**:京东可能有反爬虫机制,频繁请求可能会被封IP。可以适当增加等待时间,或者使用代理IP。
2. **页面结构变化**:京东的页面结构可能会发生变化,需要根据实际情况调整选择器。
3. **异常处理**:在爬取过程中可能会遇到各种异常,需要添加异常处理机制。
### 5. 限制单个文件大小
如果单个文件大小超过50M,可以考虑将评价信息分批保存到多个文件中,或者使用压缩文件格式(如ZIP)保存。
### 6. 文件数量限制
如果文件数量超过5个,可以考虑将多个商品的评价信息合并到一个文件中,或者使用数据库存储。
希望以上代码和解析对你有所帮助!如果有任何问题,欢迎随时提问。