一,下载及安装
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()