zoukankan      html  css  js  c++  java
  • 第8章 scrapy进阶开发(1)

    8-1 selenium动态网页请求与模拟登录知乎

    Ⅰ、介绍selenium

    1.什么是selenium:selenium百度百科

    2.selenium的构架图:

    如果要操作浏览器,还需要一个drive。

    Ⅱ、安装selenium

    1.可以 pip install selenium。

    2.找selenium的文档(比较难找)。

    如图:

    找到Drive,下载对应浏览器的drive,推荐用chrome(如果打不开就要VPN下载)

    Ⅲ、使用selenium

     1 # -*- coding: utf-8 -*-
     2 
     3 from selenium import webdriver
     4 from scrapy.selector import Selector
     5 
     6 
     7 #知乎的模拟登录
     8 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")  #路径是chromedriver.exe的存放的位置
     9 browser.get("https://www.zhihu.com/#signin")
    10 browser.find_element_by_css_selector(".view-signin input[name='account']").send_keys("********") #帐号
    11 browser.find_element_by_css_selector(".view-signin input[name='password']").send_keys("********") #密码
    12 browser.find_element_by_id("captcha").send_keys(input('请输入验证码:'))
    13 browser.find_element_by_css_selector(".view-signin button.sign-button").click() #登录
    14 browser.quit()
    15 
    16 
    17 #可以用selenium得到js加载后的html,比如这样的话可以抓取到本来抓取的不到的一些字段(淘宝的交易量等等)
    18 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
    19 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
    20 print(browser.page_source) #page_source就是js加载完的源代码
    21 #browser.quit()
    22 '''
    23 如果是用selenium本身的选择器(python写的,比较慢),会很慢
    24 所以现在转换成scrapy中的selector(他是用c语言写的,很快)
    25 模版,也可以嵌入scrapy中
    26 '''
    27 t_selector=Selector(text=browser.page_source)
    28 print(t_selector.xpath('//*[@id="J_StrPriceModBox"]/dd/span/text()').extract())

    有时候取不到内容,看看是不是还没有加载完,在中间sleeep几秒就好了。

    8-2 selenium模拟登录微博, 模拟鼠标下拉

    微博也有开放的API:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

     1 #selenium 完成微博模拟登录
     2 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
     3 browser.get("http://weibo.com/")
     4 import time
     5 time.sleep(5)
     6 browser.find_element_by_css_selector("#loginname").send_keys("******")
     7 browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("******")
     8 browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click()
     9 #下拉
    10 for i in range(3):
    11     '''三次下拉操作,这是javascript的知识'''
    12     browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
    13     time.sleep(3)

    8-3 chromedriver不加载图片、phantomjs获取动态网页

    chromedriver不加载图片:

    1 #设置chromedriver不加载图片
    2 #是固定的模版
    3 chrome_opt = webdriver.ChromeOptions()
    4 prefs = {"profile.managed_default_content_settings.images":2}
    5 chrome_opt.add_experimental_option("prefs", prefs)
    6 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe",chrome_options=chrome_opt)
    7 browser.get("http://weibo.com/")

    phantomjs获取动态网页:

    下载地址:http://phantomjs.org/download.html 如果不能下载,复制链接到迅雷下载

    淘宝的详情页实例

    1 #phantomjs, 无界面的浏览器, 多进程情况下phantomjs性能会下降很严重
    2 browser = webdriver.PhantomJS(executable_path="F:/迅雷下载/phantomjs-2.1.1-windows/bin/phantomjs.exe")
    3 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
    4 print (browser.page_source)
    5 browser.quit()

    需要代码汇总请移步我的github:https://github.com/pujinxiao/project_pjx/blob/master/s0vkaq/ArticleSpider/tools/selenium_spider.py

    关于selenium的我推荐虫师的教程,还是很不错的。「UI 测试自动化selenium」汇总

    作者:今孝

    出处:http://www.cnblogs.com/jinxiao-pu/p/6809583.html

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    zz学习技术的三部曲:WHAT、HOW、WHY
    zz一种理想的在关系数据库中存储树型结构数据的方法
    某外企SQL Server面試題
    C语言中的指针 &与*
    剖析SQL Server执行计划(zz)
    UNICODE,GBK,UTF8区别
    (Part 1Chapter 14) High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
    关于GtkTreeView和 MVC的一篇好文章 入木三分
    一个混合 MPI_Init() 和 gtk_init() 的实例序
    (Part 2Chapter 57) High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
  • 原文地址:https://www.cnblogs.com/jinxiao-pu/p/6809583.html
Copyright © 2011-2022 走看看