分类 爬虫 中的文章

win10下安装splash

安装DOCKER

Docker for windows 仅支持win10专业版,并且电脑需支持虚拟化技术。

任务管理器

其他版本的需安装Docker Toolbox

国内可以使用阿里云镜像来下载

下载完成之后直接点击安装。

启动Docker

双击Docker QuickStart启动Docker Toolbox终端。

启动后出现错误,卡在了Finalize这一步……

错误信息

打开安装目录下start.sh文件,将84行的clear注释掉(clear->#clear)。再次启动Docker QuickStart。

启动正常

安装Splash

执行命令:

$ docker pull scrapinghub/splash

启动Splash

$ sudo docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash

验证

在浏览器输入:192.168.100:8050

显示splash页面

splash页面

……

阅读全文

在Scrapy使用splash爬取动态页面

在windwos中启动Docker Quickstart Terminal后运行splash:

docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash

表示:Splash现在在端口8050(http)和5023(telnet)上的192.168.99.100处可用。

启动后在浏览器中输入192.168.99.100:8050 验证是否启动成功。


在scrapy项目文件settings.py中添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
SPLASH_URL = 'http://192.168.99.100:8050/'

# 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
	'scrapy_splash.SplashCookiesMiddleware': 723,
	'scrapy_splash.SplashMiddleware': 725,
	'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
# 设置去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

# 用来支持cache_args(可选)
SPIDER_MIDDLEWARES = {
	'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

在爬虫文件pider.py中添加

……

阅读全文

安装scrapy

环境 winpython3.6

pip install scrapy

发现在安装依赖twisted时出错,需要vc++14.0. 网上搜索发现需要下载安装visual studio等,太麻烦了。于是乎google到了Twisted-18.7.0-cp36-cp36m-win_amd64.whl。

pip install Twisted-18.7.0-cp36-cp36m-win_amd64

完成后继续

pip install scrapy

安装成功后,验证:

In[1]:import scrapy
In[2]:scrapy.version_info
Out[2]: (1, 5, 1)
……

阅读全文

将scrapy爬到的内容存入sqlite数据库

这个方法需要手动创建数据库文件并将表建立好,否则程序运行会出错。

settings.py

1
2
3
4
5
6
# sqlite 配置
SQLITE_DB_NAME = 'Data.db'                      #数据库名称
SQLITE_TABLE_NAME = 'table'                     #表名称
ITEM_PIPELINES={
    'dirName.pipelines.Sqlite3Pipeline': 400,
}

pipelines.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import sqlite3
    class Sqlite3Pipeline(object):
        def __init__(self, sqlite_file, sqlite_table):
            self.sqlite_file = sqlite_file
            self.sqlite_table = sqlite_table
        @classmethod
        def from_crawler(cls, crawler):
            return cls(
                sqlite_file = crawler.settings.get('SQLITE_DB_NAME'), # 从 settings.py 提取
                sqlite_table = crawler.settings.get('SQLITE_TABLE_NAME', 'items')
            )
        def open_spider(self, spider):
            self.conn = sqlite3.connect(self.sqlite_file)
            self.cur = self.conn.cursor()
        def close_spider(self, spider):
            self.conn.close()
        def process_item(self, item, spider):
            values = (
            item['A'],
            item['B'],
            item['C'],
            item['D'],
            item['E']
            )
            sql = 'INSERT INTO proxy VALUES (?,?,?,?,?)'    #注意插入的数据个数
            self.cur.execute(sql, values)
            self.conn.commit()
            return item        
……

阅读全文