【爬虫】用Selenium+PyQuery爬取京东商城

本文介绍了如何利用Selenium和PyQuery爬取京东商城的手机信息,包括商品名称、图片、价格、评价数和店名,并将其存储到MongoDB数据库。文章详细讲解了爬取流程,从驱动浏览器搜索关键字,解析分批次返回的页面数据,再到翻页和数据保存的实现步骤。
摘要由CSDN通过智能技术生成

前言

本篇文章是在学习崔庆才教学视频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请求,这里中间会让进程睡几秒中
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值