前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫进阶(二)

爬虫进阶(二)

作者头像
张俊红
发布2018-04-11 14:57:30
1.3K0
发布2018-04-11 14:57:30
举报
文章被收录于专栏:张俊红张俊红

总第66篇

在前面的几篇推文中我们分享了最基础的爬虫入门,以及基于AJAX的爬虫入门,这篇我们分享关于如何利用selenium对目标网页进行数据爬取的。

01|背景介绍:

学爬虫怎么能不买一本Python爬虫书来看呢,有人推荐说《用Python写网络爬虫》这本书不错,所以决定入手一本看看,但是淘宝上卖家比较多,我该选哪家呢,我想选的肯定是质量又好(销量不错),价格又便宜的卖家,但是鉴于淘宝卖家众多,人为去筛选有点累,所以决定爬取数据来帮我选择一下。

数量果真有点多,每一页有四十多家,也就是用“用Python写网络爬虫”这个词做搜索词出现了四百多个结果,如果人为去筛选,会有多累。既然学了爬虫,就要用到实际生活中,所以用爬虫来爬取这四百多条数据。我们需要这四百条数据的销量、价格,发货地,书店名。

老规矩,我们先用预演一遍如果人工去实现这个过程会怎么做:

打开淘宝——找到输入框并输入《用Python写网络爬虫》——点击搜索——出现商品页——把第一页中的所有商品信息记录下来——然后进行翻页到下一页——重复记录信息的动作——直至最后。

如果用之前学过的爬虫知识来执行这个流程,翻页之前的步骤我们可以手动解决,也不麻烦,但是在翻页的这里卡住了,之前在爬取房天下的数据时有用到翻页,房天下数据爬取及简单数据分析,当时是通过调整url参数进行翻页的,我们看看这里的翻页可不可以通过修改参数来进行呢,结果发现参数并没有什么明显规律,所以不可以通过这个方式进行翻页操作。

除了修改参数,我们在上一篇推文中还用到另一种知识,基于AJAX请求的网页,我们去看看淘宝的页与页之间是否也是采用AJAX请求的,如果是的话可以通过AJAX去或获取每一页的url,然后去进行下一步。可查看前一篇基于AJAX请求的网页爬取:爬虫进阶(一)。通过浏览XHR对象,发现并没有翻页的AJAX的请求,看来此方法也行不通,那么有没有一种方法可以直接点击下一页来进行翻页操作呢,答案是有的,我们这次就分享这种可以模拟人体操作网页的技术——selenium。

02|selenium介绍:

1、selenium是什么

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Chrome等。更多信息移步官网:http://www.seleniumhq.org/

2、用selenium能做什么

Selenium Python绑定提供了使用Selenium WebDriver编写功能/验收测试的简单API。通过Selenium Python API,您可以直观地访问Selenium WebDriver的所有功能,说的直白一点,就是他可以模拟操作几乎我们人手动对浏览器可以做的所有行为。

在本篇内容中,我们将利用selenium去进行打开淘宝页面、输入关键词、点击搜索、翻页等操作,下图为一些API。

更多详细功能介绍移步:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

03|开始爬取数据:

1、爬取目标确立

要获取《用Python写网络爬虫》这个关键词下面的所有信息,包括价格、销量、店铺名、发货地址四个信息。

2、分析目标网页

在背景介绍里面已经分析过,目标网页不适合用以前学过的知识进行爬取,需要用新的知识—selenium去进行爬取。

3、爬取流程确立

在前面的背景介绍里面已经预演过一遍,我们直接复制过来即可。

打开淘宝——找到输入框并输入《用Python写网络爬虫》——点击搜索——出现商品页——把第一页中的所有商品信息记录下来——然后进行翻页到下一页——重复记录信息的动作——直至最后。

这里所有的过程我们都使用selenium来完成,而不是人为的去点击。

4、开始编写程序

代码语言:javascript
复制
#导入相关库

import refrom selenium 
import webdriverfrom 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 bs4 import BeautifulSoup 

#创建空列表用于存放数据

sales=[]
prices=[]
adresses=[]
shopname=[]

#输入关键字并进行搜索
browser = webdriver.Chrome()#创建一个浏览器对象
browser.get('https://www.taobao.com')#给浏览器传入一个url参数
input=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q')))#等到输入框加载完成
submit=WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button')))#等到点击搜索按钮加载完成
input.send_keys("用Python写网络爬虫")#向输入框输入关键字进行搜索
submit.click()#点击搜索按钮

#连续翻页并进行解析

for i in range(2,10):   
   #等待页码框加载完成      
    input1=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
   #等待确定按钮加载完成    
    submit1=WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CS  S_SELECTOR, '#mainsrp-pager > div > div > div > div.form >    span.btn.J_Submit')))

    input1.clear()#清空输入框
    input1.send_keys(i)#向输入框输入页码数
    submit1.click()#点击确定按钮
    WebDriverWait(browser,10).until(EC.text_to_be_present_in_element(
            (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(i)))#等待页码跳转成功
    WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))#等待商品页加载完成
   

    #开始网页解析
    html=browser.page_source
    soup = BeautifulSoup(html,'lxml')    

    for name in soup.select(".item .shopname"):
        shopname.append(name.text[6:-1])    
    for sale in soup.select(".item .deal-cnt"):
        sales.append(sale.text[:-3])    
    for price in soup.select(".item strong"):
        prices.append(price.text)    
    for adress in soup.select(".item .location"):
        adresses.append(adress.text)

最后把各个列表进行合并,生成一个DataFrame进行输出,下图为部分结果示例。

PS:

selenium这个功能感觉好强大,本来录制一段浏览器自动化运行的视频,但是效果不太理想,就没放上来,建议大家深入了解一下这个库,还是很不错的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01|背景介绍:
  • 02|selenium介绍:
    • 1、selenium是什么
      • 2、用selenium能做什么
      • 03|开始爬取数据:
        • 1、爬取目标确立
          • 2、分析目标网页
            • 3、爬取流程确立
              • 4、开始编写程序
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档