文章目录
前言
本篇文章是在学习崔庆才教学视频16课时后写的。教学视频中爬取的是淘宝,由于我发现淘宝需要登录,就换用了京东商城,但发现京东商城的难度一点也不必淘宝的低,最后搞了一下午才完成。淘宝的数据是一次性全部获取的,而京东商城的数据分两次获取:先加载一般的数据,当鼠标滚动框下滑到一定位置时再通过ajax加载余下的数据。
本次爬取京东商城的手机信息(商品名称,商品图片,商品价格,评价数,店名),并把它存入MongoDB中。本次爬取的都是索引界面的信息,没有深入去爬取详情界面的信息,
1. 项目预览
项目目录
数据库
2. 库的引入
创建spider_jd.py文件,并把下面的引用加入到文件中,要确保安装好
注:如果selenium驱动不了chrome浏览器,可能是没有下载chromedriver,百度下载一个就好
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from pyquery import PyQuery as pq
from urllib.parse import urlencode
import requests
from config_jd import *
import pymongo
3. 爬取流程
1.使用selenium驱动浏览器,打开京东,在搜索框中输入关键字,点击搜索按钮
2.获取并解析页面,获得自己想要的数据
3.将数据存入mongodb中
4.翻页,继续爬取下一页内容
4. 驱动浏览器搜索关键字
4. 1页面分析
我们首先要用webdriver,打开浏览器,进入到京东首页,然后获取到搜索栏和确定按钮,然后驱动浏览器输入关键字,并搜索
搜索栏:
确定按钮:
4.2 驱动浏览器代码
spider_jd.py
KEYWORD = '手机' #设置关键字,用于搜索
browser = webdriver.Chrome() #获取浏览器对象
wait = WebDriverWait(browser, 10) #显式等待
#搜索函数,用于第一次搜索某个关键字
def search():
try:
#驱动浏览器打开京东商城
browser.get('https://www.jd.com')
#显示等待,获取到文本框,#key为搜索框的id
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#key'))
)
#显示等待,获取搜索按钮,#search > div > div.form > button 为搜索框的css选择器
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#search > div > div.form > button')))
#向文本框中输入关键字
input.send_keys(KEYWORD)
#点击提交按钮
submit.click()
#将浏览器,滚动条向下滚动
scroll()
#获取数据,这里先获取第一页
get_products(1)
#获取总页数,显示等待
total = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
return total.text
except TimeoutError:
#如果发生超时错误,递归调用
return search()
#该方法用于驱动浏览器向下滚动,出发ajax请求,这里中间会让进程睡几秒中