|
|
|
@ -1,2 +1,133 @@
|
|
|
|
|
# Spider
|
|
|
|
|
# 京东网站Selenium抓取脚本说明文档
|
|
|
|
|
|
|
|
|
|
本文档解释了使用Selenium的Python脚本,用于登录京东网站,保存会话Cookie以供未来会话使用,并抓取多个页面上的产品数据。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 依赖关系
|
|
|
|
|
|
|
|
|
|
脚本使用了几个Python库:
|
|
|
|
|
|
|
|
|
|
- `selenium` 用于浏览器自动化
|
|
|
|
|
- `time` 用于管理延迟
|
|
|
|
|
- `json` 用于Cookie序列化
|
|
|
|
|
- `csv` 用于输出文件管理
|
|
|
|
|
|
|
|
|
|
确保使用pip安装所有依赖项:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
pip install selenium
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 脚本功能概览
|
|
|
|
|
|
|
|
|
|
### Cookie管理
|
|
|
|
|
|
|
|
|
|
1. **登录和Cookie检索:**
|
|
|
|
|
- 函数`getcookie()`用于通过扫描QR码手动登录京东网站,并在登录后自动保存会话Cookie到文件(`Jdcookie.txt`)。这个过程在初始运行时需要手动操作以进行认证。
|
|
|
|
|
- 脚本等待直到URL变更为京东首页,表示登录成功,然后检索并保存Cookie。
|
|
|
|
|
|
|
|
|
|
### 产品数据抓取
|
|
|
|
|
|
|
|
|
|
2. **数据抓取流程:**
|
|
|
|
|
- 再次运行脚本时(已保存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自动化浏览器操作模拟用户登录行为,并对特定商品数据进行抓取和存储,以便后续分析使用。此脚本在使用时遵守相关法律法规和网站条款,尊重数据隐私和版权。
|