docker+scrapy+scrapy_splash爬取大麦网
文章目录
- 背景
- 开始
- 起初
- 思考
- 动手
- 下载并配置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.项目名称: 爬取大麦网近期演唱会信息 2.主要功能: 爬取大麦网近期演唱会信息并显示 3.开发过程: 1)搭建环境: 下载Python 安装Python 下载PyCharm 安装PyCharm 启 ...
- 《结对-爬取大麦网演唱会信息-设计文档》
结对编程成员:阎大为,张跃馨 搭建环境: 1.安装Python 网址:https://www.python.org/ 2.安装Pycharm 网址:http://www.jetbrains.c ...
- 结对-爬取大麦网演唱会信息-设计文档
结对编程成员:阎大为,张跃馨 搭建环境: 1.安装python2.7 2.安装beautifulsoup4等相关模块 编写程序阶段: 1.分析html代码以及了解相关参数 2.写代码,爬取网站 ...
- 用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型
文章目录 前言 一.Scrapy爬虫爬取豆瓣电影 1. Scrapy框架介绍 (1) Scrapy框架构造: (2) 数据流 (3) 项目结构 2. 创建爬虫爬取豆瓣 (1)创建项目 (2) 创建It ...
- 利用python的scrapy框架爬取google搜索结果页面内容
scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...
- 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云
基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...
- 03_使用scrapy框架爬取豆瓣电影TOP250
前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...
- Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB
通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...
- python大乐透代码_scrapy框架爬取大乐透数据
上次做了一个双色球的数据爬取,其实大乐透的爬取也很简单,使用request就可以爬取,但是为了更好的进步,这次爬取大乐透采用了scrapy框架. scrapy框架的运行机制不介绍了,不懂的先去goog ...
- python之scrapy实战爬取表情包
python之scrapy实战爬取表情包 前言:在之前我们学习了scrapy框架的基本使用,今天我们通过实战(爬取http://www.doutula.com的套图)来更加了解scrapy框架额使用, ...
最新文章
- python语言中文社区-Python 之父谈 Python-Go语言中文社区
- 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
- spark SQL Running the Thrift JDBC/ODBC server
- Python基础——数据分析考核(基础版本)
- phpmyadmin 安装 配置
- 大型科技公司架构:中台模式的爱与恨
- ajax 偶尔302,关于Ajax 中response出现302的一点见解
- 浅谈https(创建、传输、断开)
- Tensorflow 学习二 tf.Session().run
- 【AI面试题】为什么必须在神经网络中引入非线性
- quickselect java,实现快速选择
- Linux基本操作(6)——Linux 重写rm 命令 实现回收站功能
- 华为S9303三层交换机一次配置经历和心得
- 寒流来袭·《求职初体验》
- 智能计算系统(学习笔记)-第三章深度学习
- QT 网络编程之https
- 2020 全国省份数据整理
- 统统卸载!再见了,流氓顽固软件!
- 织梦dedecms橙色响应式月嫂保姆家政服务公司网站模板
- 20本必读的用户体验书目
热门文章
- ICO走进华盛顿:国会探讨加密货币,有什么可以期待?
- 用 Python 给自己的头像加一个小国旗或者小月饼
- ttl转rs232发送十六进制_浅析 UART、RS232、TTL 之间的关系(转)
- 【NLP基础理论】10 上下文表示(Contextual Representation)
- [TcaplusDB] 行业新闻汇编(6月29日)
- python 实现 加减乘除,对数指数,三角反三角计算器
- [已解决]VitrualBox 启动linux虚拟机后,无法访问网络解决方法
- 蓝叠手机模拟器使用技巧
- OSPF之Stub区域
- Bootstrap(一)