js抓取网页内容(scrapy1064位python3.6scrapy1.3.3-splash,那知)

优采云 发布时间: 2021-11-14 01:18

  js抓取网页内容(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感兴趣的可以参考官网:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线