一,抓取分析

  本次目标是爬取京东商品信息,包括商品的图片,名称,价格,评价人数,店铺名称。抓取入口就是京东的搜索页面,这个链接可以通过直接构造参数访问https://search.jd.com/Search?keyword=iPhone,显示的就是第一页的搜索结果。

         

  页面下方有一个分页导航,包括前7页的链接,下一页的链接和跳转任意页面的链接。

            

  这里的商品显示结果一般都是100页,要获取每一页的内容只需要将页码从1到100遍历即可。所以,我们直接在页面输入框中输入要跳转的页面,点击确定按钮就跳转到对应的页面。

  我们在这里不使用直接点击“下一页”,一旦爬取过程中出现异常退出,就无法切换到后续页面了。并且,在爬取过程中也需要记住当前的页码数。当我们利用Selenium加载某一页的商品后,在用相应的解析库解析即可。

二,获取商品列表

   我们首先需要构造一个抓取的URL:https://search.jd.com/Search?keyword=iPhone,参数keyword就是要搜索的关键字。只要改变这个参数,就能获取不同商品的列表,这里我们可以将它定义为一个变量。

# _*_ coding=utf-8 _*_

import pymongo
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote # 配置Selenium
browser = webdriver.Chrome(executable_path=r'D:\Google\Chrome\Application\chromedriver')
wait = WebDriverWait(browser, 10)
keyword = 'iPhone' # 配置MongoDB
MONGO_URL = 'localhost'
MONGO_DB = 'JD'
MONGO_COLLECTION = 'goods'
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB] def get_page(page):
"""
获取页面
:param page: 页码
:return:
"""
print('正在爬取第', page, '页')
try:
url = 'https://search.jd.com/Search?keyword=' + quote(keyword)
browser.get(url) if page >= 1:
# 页码搜索框加载成功
search_page = wait.until(
EC.presence_of_element_located(
(By.XPATH, '//div[@id="J_searchWrap"]//div[@id="J_bottomPage"]//span[2]/input'))
)
# 页码确认按钮加载成功
submit = wait.until(
EC.element_to_be_clickable((By.XPATH, '//div[@id="J_searchWrap"]//div[@id="J_bottomPage"]//span[2]/a')))
print('button')
search_page.clear()
search_page.send_keys(page)
submit.click() # 当前页码显示标识加载成功,对比我们传入的page,结果一致就返回True,证明是跳转到了传入的page页面
wait.until(
EC.text_to_be_present_in_element(
(By.XPATH, '//div[@id="J_searchWrap"]//div[@id="J_bottomPage"]/span//a[@class="curr"]'), str(page)) )
# 商品列表加载成功
wait.until(
EC.presence_of_element_located((By.XPATH, '//div[@id="J_searchWrap"]//div[@id="J_goodsList"]/ul//li'))
)
print('Goods show successfully')
get_goods()
except TimeoutException:
get_page(page) def get_goods():
"""
获取商品数据
:return:
"""
items = browser.find_elements_by_xpath('//div[@id="J_searchWrap"]//div[@id="J_goodsList"]/ul//li')
for item in items:
goods = {
'img': item.find_element_by_xpath('//div[@class="p-img"]/a/img').get_attribute('src'),
'price': item.find_element_by_xpath('//div[@class="p-price"]/strong').text,
'commit': item.find_element_by_xpath('//div[@class="p-commit"]/strong').text,
'title': item.find_element_by_xpath('//div[@class="p-name p-name-type-2"]/a').text,
'shop': item.find_element_by_xpath('//div[@class="p-shop"]/span/a').text,
}
print(goods)
save_to_mongo(goods) def save_to_mongo(result):
"""
保存到MongoDB
:param result: 抓取到的结果:单个商品信息
:return:
"""
try:
if db[MONGO_COLLECTION].insert(result):
print('储存到MongoDB成功!')
except Exception:
print('存储到MongoDB失败!') if __name__ == '__main__':
for i in range(1, 10):
get_page(i)

爬虫—Selenium爬取JD商品信息的更多相关文章

  1. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  2. 利用selenium爬取京东商品信息存放到mongodb

    利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...

  3. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

  4. 爬虫之selenium爬取京东商品信息

    import json import time from selenium import webdriver """ 发送请求 1.1生成driver对象 2.1窗口最大 ...

  5. 爬虫系列(十三) 用selenium爬取京东商品

    这篇文章,我们将通过 selenium 模拟用户使用浏览器的行为,爬取京东商品信息,还是先放上最终的效果图: 1.网页分析 (1)初步分析 原本博主打算写一个能够爬取所有商品信息的爬虫,可是在分析过程 ...

  6. selenium+phantomjs爬取京东商品信息

    selenium+phantomjs爬取京东商品信息 今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618. ...

  7. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  8. Python爬虫-爬取京东商品信息-按给定关键词

    目的:按给定关键词爬取京东商品信息,并保存至mongodb. 字段:title.url.store.store_url.item_id.price.comments_count.comments 工具 ...

  9. Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)

    之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息.但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息. 下 ...

随机推荐

  1. POJ 2348 Euclid's Game【博弈】

    题目链接: http://poj.org/problem?id=2348 题意: 给定两个数,两个人每次从较大数中减去较小数的倍数,谁先得到0谁获胜,为谁赢? 分析: 令一种可能出现的整数对为(a,b ...

  2. 2017icpc乌鲁木齐网络赛Colored Graph (构造)

    题目 https://nanti.jisuanke.com/t/16958 题意 给定一个n(n<=500)个点的无向图,给每条边黑白染色,输出同色三角形最少的个数和对应的方案 分析 首先考虑给 ...

  3. ArrayList源码分析超详细(转载)

    ArrayList源码分析超详细   ArrayList源码分析超详解 想要分析下源码是件好事,但是如何去进行分析呢?以我的例子来说,我进行源码分析的过程如下几步: 找到类:利用 IDEA 找到所需要 ...

  4. [转] OracleDataReader.Read()是否有值

    TongYu2009的原文地址 当你执行一次OracleDataReader.Read()是Bool型),注意是只读取一个!如果你的Select语句执行结果是空,或者所有的结果都已经读取完了则Orac ...

  5. Deepin-安装和卸载软件

    一般默认厂商源安装软件 安装软件: 示例:sudo apt-get install xx 实例:sudo apt-get install nodejs 卸载软件: 示例:sudo apt-get -- ...

  6. GIS+=地理信息+云计算技术——Spark集群部署

    第一步:安装软件         Spark 1.5.4:wget http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2 ...

  7. [办公应用]如何在WORD中让英文网址可以在字符中间换行

    有时候我们写文章,存在中英文混合录入的情况.一般情况下,office 2003的word软件中,会自作聪明的避免单词断行显示,也就是说它会默认尽量把一个单词显示在某一行内,从而避免单词被分开.但有时候 ...

  8. Codeforces Beta Round #22 (Div. 2 Only) E. Scheme dfs贪心

    E. Scheme   To learn as soon as possible the latest news about their favourite fundamentally new ope ...

  9. 电商系统的演变可以看出架构演变 Dubbo入门 远程过程调用 需要解决的问题

    Dubbo入门---搭建一个最简单的Demo框架 - CSDN博客 https://blog.csdn.net/noaman_wgs/article/details/70214612 Dubbo背景和 ...

  10. GitHub Pages使用入门

    1.什么是GitHub Pages GitHub Pages可以当做项目的Websites,GitHub Pages有两种最基本的用法: 作为你自己(或者组织)的网站(访问地址示例:http://us ...