文章目录

  • 背景
  • 开始
    • 起初
    • 思考
    • 动手
      • 下载并配置docker
      • 拉取镜像并启动
      • 爬取网页
      • 爬取结果
  • 总结

背景

今天拿到个代码需要改改,他是用scrapy爬取大麦网,然后我改了将近一个小时还是得不到内容,第一是太久没用scrapy写爬虫,其次也是因为当时思路太死板,忘了一些重要的细节问题,所以导致一直改不好代码。然后点了个外卖,继续想这个问题。

开始

起初

一开始我还是自己重新搭了一个scrapy的基本框架出来,还是那两句代码
scrapy startproject 项目名生成一个项目
scrapy genspider 爬虫名 网址生成爬虫,需要自己编写解析函数
然后开始写解析函数以及配置setting中相关的设置
但是运行会发现没有结果返回,查看运行日志发现成功请求到网页,但是得不到相关的信息。用print打印css选择的内容发现返回的内容是[],也就是没有得到内容。

思考

第一反应是不应该啊,明明网页都是正常请求到的,怎么会得不到信息呢?
想了一会,然后仔细看了一下请求得到的网页内容,发现关于门票那些内容并没有,恍然大悟。这不就是动态网页吗?然后去看了一下,果然就发现了js渲染的内容


一般这种情况我都是直接requests访问这个网页,然后解析出数据就好,但是今天我和scrapy杠上了,难道scrapy就不能爬取动态网页了吗?然后我尝试了用selenium去请求网页,这样就可以得到网页内容,但是返回的信息和scrapy框架本身的css、xpath选择器兼容性太差,那还不如直接请求用beautifulsoup或者lxml解析。然后去百度了一番,发现了scrapy_splash这个库,于是开始动手尝试。

动手

安装scrapy_splash并不难,pip install scrapy_splash就行,但是需要下载docker,因为scrapy_splash必须在docker中使用。

下载并配置docker

去官网下载docker,然后安装。这没什么难度,安装好之后需要重启一次电脑。然后就是配置镜像源,不然的话拉取镜像会失败的。去阿里云弄一个镜像加速器,然后配置到docker的setting中
关于配置镜像加速器的博客

然后apply,重启docker

拉取镜像并启动

拉取镜像
docker pull scrapinghub/splash
启动
docker run -p 8050:8050 scrapinghub/splash


输入地址去render一下,如果得到了完整的页面就说明渲染成功,那我们就可以使用scrapy爬取了

已经得到了我们想要的内容,所以直接爬取就好

爬取网页

spider.py

import scrapy
from damai.items import DamaiItem
from scrapy_splash import SplashRequestclass SpiderSpider(scrapy.Spider):name = 'spider'start_urls = ['https://www.damai.cn/']def start_requests(self):splah_args = {"lua_source": """function main(splash, args)assert(splash:go(args.url))assert(splash:wait(3))return {html = splash:html(),png = splash:png(),har = splash:har(),}end"""}start_url = 'https://www.damai.cn/'headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'}yield SplashRequest(url=start_url, callback=self.parse, args={'wait': 1.0},headers=headers)def parse(self, response):#print(response.text)item = DamaiItem()info=response.css('.iteminfo')#print(info)for i in info:item['title']=i.css('.title::text').extract_first()item['address']=i.css('.venue::text').extract_first()item['showtime']=i.css('.showtime::text').extract_first()item['price']=i.css('.price::text').extract_first()yield item

另外的配置我就贴图啦,代码量很少


至于setting就自己去配置啦,这个也简单

爬取结果


总算是都爬下来了,睡觉去了。

总结

太久不敲代码真的会生疏,明明一个动态网页的问题居然第一时间没反应过来,花了几个小时做这个简单的不为了别的,起码对于不懂得或者遗忘的东西应该立马回顾一下,老说温故而知新,这不以后动态网页用scrapy爬取的套路我也会了嘛。也希望那个同学也能看到这个博客吧,昨天没帮到忙挺不好意思的。

docker+scrapy+scrapy_splash爬取大麦网相关推荐

  1. 《结对-爬取大麦网近期演唱会信息-结对项目总结》

    1.项目名称: 爬取大麦网近期演唱会信息 2.主要功能: 爬取大麦网近期演唱会信息并显示 3.开发过程: 1)搭建环境: 下载Python 安装Python 下载PyCharm 安装PyCharm 启 ...

  2. 《结对-爬取大麦网演唱会信息-设计文档》

    结对编程成员:阎大为,张跃馨 搭建环境:  1.安装Python  网址:https://www.python.org/  2.安装Pycharm  网址:http://www.jetbrains.c ...

  3. 结对-爬取大麦网演唱会信息-设计文档

    结对编程成员:阎大为,张跃馨 搭建环境:  1.安装python2.7  2.安装beautifulsoup4等相关模块 编写程序阶段:  1.分析html代码以及了解相关参数  2.写代码,爬取网站 ...

  4. 用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型

    文章目录 前言 一.Scrapy爬虫爬取豆瓣电影 1. Scrapy框架介绍 (1) Scrapy框架构造: (2) 数据流 (3) 项目结构 2. 创建爬虫爬取豆瓣 (1)创建项目 (2) 创建It ...

  5. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

  6. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云

    基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...

  7. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  8. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  9. python大乐透代码_scrapy框架爬取大乐透数据

    上次做了一个双色球的数据爬取,其实大乐透的爬取也很简单,使用request就可以爬取,但是为了更好的进步,这次爬取大乐透采用了scrapy框架. scrapy框架的运行机制不介绍了,不懂的先去goog ...

  10. python之scrapy实战爬取表情包

    python之scrapy实战爬取表情包 前言:在之前我们学习了scrapy框架的基本使用,今天我们通过实战(爬取http://www.doutula.com的套图)来更加了解scrapy框架额使用, ...

最新文章

  1. python语言中文社区-Python 之父谈 Python-Go语言中文社区
  2. 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
  3. spark SQL Running the Thrift JDBC/ODBC server
  4. Python基础——数据分析考核(基础版本)
  5. phpmyadmin 安装 配置
  6. 大型科技公司架构:中台模式的爱与恨
  7. ajax 偶尔302,关于Ajax 中response出现302的一点见解
  8. 浅谈https(创建、传输、断开)
  9. Tensorflow 学习二 tf.Session().run
  10. 【AI面试题】为什么必须在神经网络中引入非线性
  11. quickselect java,实现快速选择
  12. Linux基本操作(6)——Linux 重写rm 命令 实现回收站功能
  13. 华为S9303三层交换机一次配置经历和心得
  14. 寒流来袭·《求职初体验》
  15. 智能计算系统(学习笔记)-第三章深度学习
  16. QT 网络编程之https
  17. 2020 全国省份数据整理
  18. 统统卸载!再见了,流氓顽固软件!
  19. 织梦dedecms橙色响应式月嫂保姆家政服务公司网站模板
  20. 20本必读的用户体验书目

热门文章

  1. ICO走进华盛顿:国会探讨加密货币,有什么可以期待?
  2. 用 Python 给自己的头像加一个小国旗或者小月饼
  3. ttl转rs232发送十六进制_浅析 UART、RS232、TTL 之间的关系(转)
  4. 【NLP基础理论】10 上下文表示(Contextual Representation)
  5. [TcaplusDB] 行业新闻汇编(6月29日)
  6. python 实现 加减乘除,对数指数,三角反三角计算器
  7. [已解决]VitrualBox 启动linux虚拟机后,无法访问网络解决方法
  8. 蓝叠手机模拟器使用技巧
  9. OSPF之Stub区域
  10. Bootstrap(一)