利用selenium爬取京东商品信息存放到mongodb
利用selenium爬取京东商城的商品信息思路:
1、首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构
2、根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归。等待数据全部加载完成。
3、创建下一页的函数去完成点击事件,获取下一页的数据
4、首页处理就直接放在脚本运行就好了。
5、将数据放到mongodb中 可以实现自己定义搜索内容,注意京东的页面数据最大为100页。 不完善的地方:
1、每次都是利用sleep等待加载。浪费时间
2、网速不好程序会因为没有获取到标签崩溃。
3、获取下一页的方式可以改成发送请求的方式
4、爬取一半重新爬取的数据重复的会重新覆盖数据库旧的数据。 在网速良好的情况下还是能正常的保证数据爬取
# <! -/* author by:daidai */>
# 京东商品信息爬取脚本
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from urllib.parse import urlencode
import mongodemo
import time driver = Chrome()
chrome_options = Options()
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) # keyword = '电脑' # 京东搜索页的链接url = https://search.jd.com/Search?keyword=%E7%94%B5%E8%84%91&enc=utf-8&wq=%E7%94%B5%E8%84%91&pvid=53766f90843b4166be83aa2139402e65
# par = {'enc': 'utf-8', 'keyword': keyword, 'wq': keyword} # kw = urlencode(par) # url = 'https://search.jd.com/Search?' + kw
# 请求搜索页
# driver.get(url) # 等待页面加载
# driver.implicitly_wait(5) # 由于页面有懒加载效果,所以先获取页面的高度
# height = driver.execute_script("return document.body.clientHeight") # 等待页面加载完成
# driver.implicitly_wait(7) # 由分析知道,页面有懒加载效果,得知一页数据为60条
def get_data():
# 获取包裹商品信息的大标签ul
ul = driver.find_element_by_class_name('gl-warp')
# 商品列表 在标签li class = "gl-item"中, 完整一页一共60个
items = ul.find_elements_by_class_name('gl-item') if len(items) == 60:
return items
# 如果没有获取到60条就递归调用,直到获取该页完整的数据
else:
return get_data() def parser_data(items):
for item in items:
# 商品的详细信息都在标签div class=p-img 下 它的下面的a标签下是图片的信息
link = item.find_element_by_css_selector(".p-img a").get_attribute("href")
# 图片地址
img = item.find_element_by_css_selector(".p-img a img").get_attribute("src")
# 因为在图片中也使用了懒加载,所以做判断
if not img:
img = item.find_element_by_css_selector(".p-img a img").get_attribute("data-lazy-img")
img = "https:" + img
# 商品价格
price = item.find_element_by_css_selector(".p-price i").text
# 商品的标题
title = item.find_element_by_css_selector(".p-name a em").text
# 店家名
trade_name = item.find_element_by_css_selector(".p-shop a").text
# 评论数
commit = item.find_element_by_css_selector(".p-commit").text
data = {"link": link, "img": img, "title": title, "shop_name": trade_name, "commit": commit, "price": price}
# 存到数据库
mongodemo.insert_data(data) def get_next_page():
# 获取下一页的数据,获取标签
next_page = driver.find_element_by_partial_link_text("下一页")
next_page.click() # 实现点击事件,跳转到下一页
# 滑动屏幕
driver.execute_script("""
window.scrollTo({
top: %s,
behavior: "smooth"
});""" % height)
time.sleep(1) # 等待页面加载
items = get_data()
parser_data(items) if __name__ == '__main__':
keyword = input('请输入要查找的信息:')
par = {'enc': 'utf-8', 'keyword': keyword, 'wq': keyword}
kw = urlencode(par)
url = 'https://search.jd.com/Search?' + kw
driver.get(url)
driver.implicitly_wait(10)
height = driver.execute_script("return document.body.clientHeight")
driver.implicitly_wait(10)
# 首页的处理 第一页的信息爬取
driver.execute_script("""
window.scrollTo({
top: %s,
behavior: "smooth"
});""" % height)
items = get_data()
parser_data(items) for i in range(8):
get_next_page() time.sleep(30)
driver.close() 将数据放到mongodb数据库中
from pymongo import MongoClient table = None
c = None def connect_server():
global table, c
c = MongoClient('mongodb://root:root@127.0.0.1:27017') # 获取连接
table = c['jd']['data'] def insert_data(data):
if not table:
connect_server()
table.insert(data) def close():
c.close()
利用selenium爬取京东商品信息存放到mongodb的更多相关文章
- selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装
今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...
- python爬虫——用selenium爬取京东商品信息
1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...
- 爬虫之selenium爬取京东商品信息
import json import time from selenium import webdriver """ 发送请求 1.1生成driver对象 2.1窗口最大 ...
- selenium+phantomjs爬取京东商品信息
selenium+phantomjs爬取京东商品信息 今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618. ...
- 爬虫—Selenium爬取JD商品信息
一,抓取分析 本次目标是爬取京东商品信息,包括商品的图片,名称,价格,评价人数,店铺名称.抓取入口就是京东的搜索页面,这个链接可以通过直接构造参数访问https://search.jd.com/Sea ...
- 爬虫系列(十三) 用selenium爬取京东商品
这篇文章,我们将通过 selenium 模拟用户使用浏览器的行为,爬取京东商品信息,还是先放上最终的效果图: 1.网页分析 (1)初步分析 原本博主打算写一个能够爬取所有商品信息的爬虫,可是在分析过程 ...
- Python爬虫-爬取京东商品信息-按给定关键词
目的:按给定关键词爬取京东商品信息,并保存至mongodb. 字段:title.url.store.store_url.item_id.price.comments_count.comments 工具 ...
- Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)
之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息.但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息. 下 ...
- 八个commit让你学会爬取京东商品信息
我发现现在不用标题党的套路还真不好吸引人,最近在做相关的事情,从而稍微总结出了一些文字.我一贯的想法吧,虽然才疏学浅,但是还是希望能帮助需要的人.博客园实在不适合这种章回体的文章.这里,我贴出正文的前 ...
随机推荐
- python 常用库
Numpy, Pandas 数据处理 Scipy 科学计算 Matplotlib 可视化 Scikit Learn 机器学习 Keras 深度学习模型 jieba 分词 Gensim 主题(包含 ...
- Yii2 设计模式——Yii2 中用到哪些设计模式?
Yii 2 设计模式“包含了两个方面的内容:1. 设计模式,2. Yii 2 框架. <设计模式>一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语言,而是在 ...
- rocketmq 4.3.2 解决远程不能消费问题,解决未识别到公网IP问题
1.解决远程不能消费问题 问题描述: nameserver和broker启动后,用tools(命令如下)能发送消息和消费消息,在局域网服务器能发送消息,消费启动后收不到消息通知问题 sh tools. ...
- YOLO理解
一.YOLO v1 1.网络结构 (1)最后一层使用线性激活函数: (2)其他各层使用leaky ReLU的激活函数: 2.Training (1) 将原图划分为SxS的网格.如果一个目标的中心落入某 ...
- Winform外包团队 项目案例展示
北京动点飞扬软件开发团队 C# WInform项目案例展示 长年承接WInForm C#项目开发,商业案例欢迎联系我们索取 有相关项目外包定制开发 欢迎联系我们 qq372900288 Tel 139 ...
- FIRMWARE BUG – THE BIOS HAS CORRUPTED HW-PMU RESOURCES
If you’re trying to install CentOS 7 on HP server and you receive the error from the caption, don’t ...
- 关于HTML和CSS一些鸡零狗碎的事
原文发表于我自己的服务器www.jjxiaoliu.cn:不过这个服务器我可能不打算续费了,所以搬到cnblogs来. 有些关于HTML和CSS的内容不值得单独列一篇文章,全都放在这里了. 我们可以利 ...
- 京东饭粒捡漏V1.13
20180629 更新 V1.131.解决下单异常问题:2.增加秒杀价格:3.增加购买数量: 功能介绍1.京东商城专用,支持饭粒模式下单,自己获得京豆返利 2.捡漏模式:帮助用户监控抢购商品,有库存的 ...
- MapReduce作业的工作原理
在Hadoop中,我们可以通过Job对象的submit()方法来运行MapReduce作业,也可以调用waitForCompletion()用于提交以前没有提交过的作业,并等待它的完成.其中,subm ...
- 2018-2019-20175334实验二《Java面向对象程序设计》实验报告
2018-2019-20175334实验二<Java面向对象程序设计>实验报告 一.实验内容及步骤 实验二面向对象程序设计-1 参考 http://www.cnblogs.com/roce ...