You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
4.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 京东网站Selenium抓取脚本说明文档
本文档解释了使用Selenium的Python脚本用于登录京东网站保存会话Cookie以供未来会话使用并抓取多个页面上的产品数据。
---
## 依赖关系
脚本使用了几个Python库
- `selenium` 用于浏览器自动化
- `time` 用于管理延迟
- `json` 用于Cookie序列化
- `csv` 用于输出文件管理
## 脚本功能概览
### Cookie管理
- **登录和Cookie检索**
- 函数`getcookie()`用于通过扫描QR码手动登录京东网站并在登录后自动保存会话Cookie到文件`Jdcookie.txt`)。这个过程在初始运行时需要手动操作以进行认证。
- 脚本等待直到URL变更为京东首页表示登录成功然后检索并保存Cookie。
### 商品数据抓取
- **数据抓取流程:**
- 再次运行脚本时已保存Cookie它加载这些Cookie以跳过登录步骤。
- 脚本遍历京东网站的搜索结果,搜索特定的查询("口红")。
- 它从最多50页中抓取产品标题、价格、店铺名称和评论数等细节。
- 抓取的数据存储在`JD.csv`中。
### 详细分解
- **初始设置和Cookie加载**
- 启动Chrome浏览器。
- 从`Jdcookie.txt`读取并加载Cookie。
- 在确保所有数据正确加载后,自动导航到下一页。
- **导航和抓取:**
- 加载Cookie后它导航到首页并输入搜索词。
- 滚动页面并捕获列出的每个产品的数据。
- 捕获的数据包括标题、价格、店铺和评论数。
- 每页的结果都会被追加到CSV文件中。
- 使用隐式等待和显式滚动来管理页面加载和数据捕获。
- **错误处理和性能:**
- 使用隐式和显式等待来管理页面加载时间和元素可见性。
- 打印有用的日志来跟踪运行过程中的进度和任何问题。
## 代码执行
- **首次运行:** 在`if __name__ == '__main__':`块中取消注释`getcookie()`以执行登录和Cookie检索。
- **后续运行:** 在第一次成功运行后,注释掉`getcookie()`使用保存的Cookie进行抓取。
### 脚本:
```python
# 导入必要的库
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
import csv
from selenium.webdriver.common.by import By
from time import sleep
# 初始化Chrome驱动
driver = webdriver.Chrome()
def getcookie():
# 这里填写登录和保存Cookies的代码
if __name__ == '__main__':
# 这里填写抓取数据的主要代码块
driver.get('http://www.jd.com/')
# 以下为抓取数据流程代码
driver.find_element(By.ID,'key').send_keys("口红")
driver.find_element(By.CLASS_NAME, 'button').click()
input() # 手动确认登录后继续
print("登录成功")
driver.get('http://www.jd.com/')
driver.find_element(By.ID,'key').send_keys("口红")
driver.find_element(By.CLASS_NAME, 'button').click()
driver.implicitly_wait(10)
with open('JD.csv', mode='w', encoding='UTF-8', newline='') as file:
csv.writer(file).writerow(['商品', '价格', '店铺', '评论数'])
for page in range(0, 50):
sleep(5)
# 下滑页面
js_down = "window.scrollTo(0, 8000)"
driver.execute_script(js_down)
sleep(5)
goods = driver.find_elements(By.CLASS_NAME, 'gl-i-wrap')
for good in goods:
title = good.find_element(By.CSS_SELECTOR, '.p-name em').text.strip()
price = good.find_element(By.CSS_SELECTOR, '.p-price strong').text.strip()
shop = good.find_element(By.CSS_SELECTOR, '.p-shop span a').text.strip()
comment = good.find_element(By.CSS_SELECTOR, '.p-commit strong a').text.strip()
print('title: ' + title)
print('price: ' + price)
print('shop: ' + shop)
print('comment: ' + comment)
# 用a+模式创建csv文件并写入
f = open('JD.csv', 'a+', encoding='utf-8')
# 基于文件对象构建csv写入
csv_a = csv.writer(f)
# 将数据写入
csv_a.writerow([title, price, shop, comment])
# 关闭文件
f.close()
driver.find_element(By.CLASS_NAME, 'pn-next').click()
print('下一页')
input() # 手动确认完成后继续
```
## 注意事项
- **浏览器版本:** 确保Chrome浏览器和`chromedriver`兼容。
- **延迟和等待:** 根据网络速度和系统性能调整睡眠时间和等待时间。
- **隐私和合规:** 注意京东网站关于自动访问和数据抓取的服务条款。
---
本文档用于理解用于京东网站的Python Selenium脚本。本脚本旨在通过Selenium自动化浏览器操作模拟用户登录行为并对特定商品数据进行抓取和存储以便后续分析使用。此脚本在使用时遵守相关法律法规和网站条款尊重数据隐私和版权。