phantomjs动态加载

一,下载及安装

    1、在百度直接搜这个phantomjs下载,

2、 点击去之后的页面如下

3、然后将解压后文件夹点击到最后一层,复制其路径

4、鼠标右键在计算机的图标上点击,属性,点击进去

 

 5、点击确定完成,最好重启下pycharm

二、phantomjs基本用法/

1、首先,在应用它之前,输入以下命令

from selenium import webdriver

如果路径为exe启动程序的路径,那么该路径需要加一个r。

driver = webdriver.PhantomJS(executeble_path=r'

D:/python/phantomjs-2.1.1-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe

')(这个每个人的路径不同,要根据自己的路径来用)

#获取指定网页的数据

driver.get('http://news.sohu.com/scroll/')   (一般这个网页为动态网页)

print(driver.find_element_by_class_name('title').text) (根据类方法名找到他下面的文本)

下面是具体实例中的应用,其主要应用在 middlewares里面,切记,如要执行middlewares里的代码,

一定要在setteing里面打开禁用DOWNLOADER_MIDDLEWARES 的注释,一般在55-60之间。

from scrapy import signals


from selenium import webdriver
from scrapy.http.response.html import HtmlResponse
class SeleniumSpiderMiddleware(object):
    def __init__(self,request,spider):
        self.driver = webdriver.PhantomJS()
#         当引擎从调度器中取出request进行请求发送给下载器之前会先执行当前的爬虫中间键,在中间键里面使用selenium使用这个request
# 拿到动态的网站的数据,然后将请求返回给spider爬虫对象
    def process_request(self, request, spider):
        if spider.name == 'taobao':
            # 使用爬虫文件的url地址
            spider.driver.get(request.url)
            for x in range(1,12,2):
                i = float(x)/11
                # scrollTop从上到下的滑动距离
                js = 'document.body.scrollTop=document.body.scrollHeight * %f % i'
                spider.driver.execute_script(js)

            # 设置相应信息,相应的url为请求的url,相应的网页内容为请求网页的源码,响应的编码为utf-8,请求的信息为获取的请求信息
            response = HtmlResponse(url=request.url,body=spider.driver.page_source,encoding='utf-8',request=request)
            # 这个地方只能返回response对象,如果返回了response对象,那么可以直接跳过下载中间件,将response的值传说递给引擎,引擎又传递给spider进行解析
            return response

2、下面是将数据存储到sqlite3在pipeline中的操作

import sqlite3
class TaobaospiderPipeline(object):

    def __init__(self):
        self.connect = sqlite3.connect('yaobaoDB')
        self.cursor = self.connect.cursor()
        self.cursor.execute('create table if not exists taobaoTable (name text,price text)')
    def process_item(self, item, spider):

        self.cursor.execute('insert into taobaoTable(name, price) VALUES ("{}","{}")'.format(item['name'],item['price']))
        self.connect.commit()
        return item
    def close_spider(self,spider):
        self.cursor.close()
        self.connect.close()

猜你喜欢

转载自blog.csdn.net/UserAgent123/article/details/81543541