网络爬虫:利用selenium,pyquery库抓取并处理京东上的图片并存储到使用mongdb数据库进行存储
一,环境的搭建已经简单的工具介绍
1.selenium,一个用于Web应用程序测试的工具。其特点是直接运行在浏览器中,就像真正的用户在操作一样。新版本selenium2集成了 Selenium 1.0 以及 WebDriver;
2.webDriver作用如下:执行代码通过给Webdriver发送指令,让Webdriver知道想要做的操作,Webdriver再根据这些操作在浏览器界面上进行控制,例如查找页面元素、发送文本、实现事件点击等等;
3.pyquery作用如下:此处用到的pyquery主要是一个对html代码数据进行提取的库,可以用来替代beautifulsoup和正则表达式对h5的提取。
如何导入所需要的库:
大部分教程中对于库的导入都是使用的pip install指令,但是当安装了多个python版本或者自己不知道自己python路径的时候,在python中可能无法调用下载的python库,此处直接使用pycharm进行导入,示例如下:

点击file->setting

点击python interpreter右上角的加号,
在界面中搜索想要的库,点击intsall package,便可以导入了。
二.使用selenium模拟浏览器访问京东页面。
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from pyquery import PyQuery as pq browser = webdriver.Chrome(ChromeDriverManager().install()) #打开Chrome 浏览器
wait = WebDriverWait(browser,10)
try:
browser.get('https://www.jd.com')
input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#key"))) #对输入框进行指定
sbmit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#search > div > div.form > button'))) #使用submit表示按钮
input.send_keys('内容') #输入内容
sbmit.click() #点击按钮
total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
get_product()
return total.text
except TimeoutException:
search()说明
上方实现功能为打开京东并在搜索框中输入内容框所指示的部分然后进行搜索,如果代码有报错无法打开chrome,是因为没有使用webdriver_manager库,添加该库,其作用是自动联网下载chromedriver是的webdriver.chrome可以运行。
三. 模拟连续翻页,方便进行搜索
函数代码如下:
def next_page(page_number):
try:
input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > input')))
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > a')))
input.clear()
input.send_keys(page_number)
submit.click()
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.curr'),str(page_number)))
get_product()
except TimeoutException:
next_page(page_number)
函数的功能为模拟在输入框中输入页码page_number,然后使用sunbmit.click语句吗,模拟点击翻页。
四.对数据进行抓取,并进行解析。
函数代码如下:
def get_product():
# wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList .gl-warp .gl-item'))) #检测图片是否加载完成
html = browser.page_source #获取网页源代码
doc = pq(html)
items = doc('#J_goodsList .gl-warp .gl-item').items() #获取所有的选择内容
for item in items:
product = {
'image': item.find('.p-img img').attr('src'), #通过获取src属性来获取图片
'price': item.find('.p-price').text(), #获取文字内容
'name': item.find('.p-name').text(), #获取物品标题
'shop': item.find('.p-shop').text() #获取商铺信息
}
print(product)
此处使用到的库为pyquery,通过selenium库对网页源代码进行获取,然后通过pyquery的find语句查找相应的元素装载到product中,最后进行打印。
网络爬虫:利用selenium,pyquery库抓取并处理京东上的图片并存储到使用mongdb数据库进行存储的更多相关文章
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- [Python]网络爬虫(一):抓取网页的含义和URL基本构成
一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...
- Python网络爬虫(Get、Post抓取方式)
简单的抓取网页 import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) ...
- Python_网络爬虫(新浪新闻抓取)
爬取前的准备: BeautifulSoup的导入:pip install BeautifulSoup4 requests的导入:pip install requests 下载jupyter noteb ...
- 用python来抓取“煎蛋网”上面的美女图片,尺度很大哦!哈哈
所用Python环境为:python 3.3.2 用到的库为:urllib.request re 废话不多说,先上代码: import urllib.request import re #获 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- PYTHON 爬虫笔记十:利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB(实战项目三)
利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可 ...
- Android利用tcpdump和wireshark抓取网络数据包
Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...
随机推荐
- Scala中的isInstanceOf和asInstanceOf区别
判断对象是否属于某个给定的类,可以用isInstanceOf方法:用asInstanceOf方法将引用转换为子类的引用. obj.isInstanceOf[T]就如同Java的obj instance ...
- 4.设置静态IP
由于Ubuntu重启之后,ip很容易改变,可以用以下方式固定ip地址 1.设置ip地址 vi /etc/network/interface # The loopback network interfa ...
- Python中pytesseract库的使用以及注意事项
当我们在使用pytesseract库的时候,使用 pip install pytesseract安装完成后,发现它并不能识别出图片内容,并且会抛出异常pytesseract.pytesseract.T ...
- Spark-shell 报错:Failed to get database default, returning NoSuchObjectException
Spark-shell 执行sql查询报错: 20/08/24 15:33:59 WARN metastore.ObjectStore: Failed to get database default, ...
- Xposed+X5使用
1.Xposed 2.X5
- ArcGis中地理数据库(sde)中概念及常见函数
以下概念及函数均在在Oracle中配置地理数据库(sde库)中使用: 一.空间类型 1.概念:存储几何数据的数据类型.所有空间信息均存储在空间列中:不存在其他的要素表.将空间信息包含在一个字段中使得在 ...
- WPF新手快速入门系列 3.MVVM
[概要] 这一章主要讲述,讲述MVVM模式和用法. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:580749909.(所有涉及到的源码都上传到了群文件里) 希望加群的人提问时尽量想清楚自己的 ...
- smtplib文字邮件的发送
今天跟大家讲解一下接口测试框架的知识准备阶段,首先是发送纯文字的电子邮件,会的同学可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8import smtplibfro ...
- Python采集CSDN博客排行榜数据
文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知 ...
- add forward
adb forward tcp:34999 localabstract:Unity-com.kingsgroup.rob adb forward --list adb forward --remove ...