js抓取网页内容(scrapy1064位python3.6scrapy1.3.3-splash,那知)
优采云 发布时间: 2021-11-14 01:18js抓取网页内容(scrapy1064位python3.6scrapy1.3.3-splash,那知)
最近想学scrapy-splash。我以前用硒和铬。我总觉得有点慢。如果我想学习scrapy-splash,我知道网上有很多不可靠的内容。整合了很多文章,终于成功了。把它写下来以免忘记它,也是一个正确的指南。
软件环境:
赢得 10 64 位
蟒蛇3.6
刮刮1.3.3
刮飞溅 0.7.2
我用的是anaconda,忘了scrapy是内置的还是后来安装的。如果没有安装anaconda,直接用pip install scrapy安装即可。
ScrapySplash 安装
注意 ScrapySplash 需要使用 docker。懂的人我就不用解释了。不明白的,跟着操作就行了。这里的 ScrapySplash 与上述软件环境中的不同。以上是scrapy中使用import时使用的。这相当于一个软件,你必须安装它才能使用它。
安装 Docker
准备
由于在docker中需要用到ScrapySplash,所以我们先安装docker。安装前,请检查您的计算机是否为 win 10 64 位,以及是否启用了超级虚拟化。
正式安装
win 10不同版本问题很多。
常规安装:从官网以下地址下载
如果这种方式安装过程中出现错误或者安装后报错,请使用docker工具箱进行安装:
注意:docker使用了虚拟化技术,所以安装的时候一起安装virtualbox,请一定要检查一下,如果你已经安装了,就不需要了。
想了解更多关于Docker的知识,可以访问Docker官网:
启动环境
安装好docker后,打开docker,可以直接使用cmd进行正常安装,如果是通过toolbox安装的,请使用Docker Quickstart Terminal进行操作。
我是用toolbox安装的,所以下面的命令行操作都在Docker Quickstart Terminal里面。
打开命令行:
第一次调用会比较慢,因为virtualbox虚拟机还在启动中。等待一段时间后出现如下界面,说明安装成功。
docker 启动后.png
里面有一个IP,请记住这是以后要使用的东西。
下载 ScrapySplash
在命令行中输入 docker run -p 8050:8050 scrapinghub/splash。这就是 docker 的使用方式。这意味着飞溅开始了。第一次启动是在本地没有splash应用的时候,会自动从docker hub下载。我们不必担心这个过程。,慢慢等。
下载后直接启动应用,出现如下界面:
启动成功.png
这时候我们可以在浏览器中输入:8050/,这里的IP就是之前出现的IP。出现如下界面,说明启动成功。
启动成功.png
注:参考相关文章时,总能看到是输入:8050/,不知道是不是每个人的电脑不一样,还是都被别人蒙上了。安装几次后,还是没有出现上面的界面。按照我的理解,localhost就是本地主机,但是我们的应用是在虚拟机里面的。如果是本地主机,就说明我们需要在虚拟机中打开浏览器,但是我们是在win 10下运行的,难道其他文章的作者都是直接在虚拟机中运行的。这里不清楚。如果有人能告知,我将不胜感激。
好了,到此,整个环境搭建完毕,下面搭建scrapy爬虫。
爬虫爬虫设置
scrapy项目其实和普通项目没什么区别。不明白的可以参考我的另一个文章 Scrapy抓取本地论坛招聘内容(一)
在这里,我创建了一个新的学习项目:
> scrapy startproject jdproject
> cd jdproject/
> scrapy genspider jd https://www.jd.com/
注意:这里的操作也是在命令行中,但是不需要在Docker Quickstart Terminal中,普通cmd中也可以
打开jdproject/spiders/jd.py,修改内容:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request, FormRequest
from scrapy.selector import Selector
from scrapy_splash.request import SplashRequest, SplashFormRequest
class JdSpider(scrapy.Spider):
name = "jd"
def start_requests(self):
splash_args = {"lua_source": """
--splash.response_body_enabled = true
splash.private_mode_enabled = false
splash:set_user_agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
assert(splash:go("https://item.jd.com/5089239.html"))
splash:wait(3)
return {html = splash:html()}
"""}
yield SplashRequest("https://item.jd.com/5089239.html", endpoint='run', args=splash_args, callback=self.onSave)
def onSave(self, response):
value = response.xpath('//span[@class="p-price"]//text()').extract()
print(value)
打开jdproject/settings.py,修改:
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, # 不配置查不到信息
}
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
SPLASH_URL = "http://192.168.99.100:8050/" # 自己安装的docker里的splash位置
DUPEFILTER_CLASS = "scrapy_splash.SplashAwareDupeFilter"
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
测试
我这里用的是测试用的,需要的是产品的价格。
jd.png
运行爬虫:
结果.png
可以清楚的看到,我们想要的价格已经出现了。
至此,我们已经成功部署了ScrapySplash,并成功实现了爬虫项目。
对splash感兴趣的可以参考官网: