一,环境的搭建已经简单的工具介绍

    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数据库进行存储的更多相关文章

  1. iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  2. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  3. [Python]网络爬虫(一):抓取网页的含义和URL基本构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...

  4. Python网络爬虫(Get、Post抓取方式)

    简单的抓取网页 import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) ...

  5. Python_网络爬虫(新浪新闻抓取)

    爬取前的准备: BeautifulSoup的导入:pip install BeautifulSoup4 requests的导入:pip install requests 下载jupyter noteb ...

  6. 用python来抓取“煎蛋网”上面的美女图片,尺度很大哦!哈哈

    所用Python环境为:python 3.3.2   用到的库为:urllib.request    re 废话不多说,先上代码: import urllib.request import re #获 ...

  7. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  8. PYTHON 爬虫笔记十:利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB(实战项目三)

    利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可 ...

  9. Android利用tcpdump和wireshark抓取网络数据包

    Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...

随机推荐

  1. Java之reflection(反射机制)——通过反射操作泛型,注解

    一.反射操作泛型(Generic) Java采用泛型擦除机制来引入泛型.Java中的泛型仅仅是给编译器Javac使用的,确保数据的安全性和免去强制类型转换的麻烦.但是编译一旦完成,所有和泛型有关的类型 ...

  2. Linux的CentOs系统查看CPU个数、核心数、线程数

    1.查看CPU物理个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 或 cat /proc/cpuinfo| grep "physi ...

  3. lombook插件的说明

    lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然, ...

  4. pytest的fixture怎么用?

    文章总览图 fixture和unittest是冲突的.舍弃unittest只用pytest. 会遇到在很多用例当中,它的前置条件是长得一样的.用例写的越来越多的时候,肯定会遇到前置条件都差不多,大家差 ...

  5. Arduboy基本用法(一)

    Arduboy基本用法(一) 一.第一个Arduboy程序 在arduino中新建项目 示例代码 #include<Arduboy.h> Arduboy arduboy; void set ...

  6. 超市管理系统C语言

    登录系统 # include <stdio.h> //头文件 # include <string.h> //字符串头文件 # include <stdlib.h> ...

  7. 关于js中循环遍历中顺序执行ajax的问题(vue)

    js里的循环,每次都是自顾自的走,它不等ajax执行好走完到success代码,就继续循环下一条数据了,这样数据就全乱了. 后来,想到试试ajax里async这个属性,async默认是true,即为异 ...

  8. laya资源版本管理

    layaair-cmd https://ldc.layabox.com/doc/?nav=zh-as-3-4-2 Laya的版本管理 https://blog.csdn.net/qq_43287088 ...

  9. Prometheus 与 国产 TDengine 的对比

    通过对比,能加深对这两个系统的理解,方便后续架构选型时作出正确决定.他们的设计思路有很多值得借鉴的地方,虽然工作中需要用到这些知识的地方不多,但是了解他们的设计细节能极大满足我的好奇心. 1.场景和需 ...

  10. 2048游戏 - C语言不引入图形库简单实现

    声明:本程序绝大部分属于原创,交互部分参考了博客园 Judge Young的原创文章 游戏2048源代码 - C语言控制台界面版, 作者Judge Young的算法思想非常值得参考,感谢作者的分享 附 ...