Monday  大神分享

 

Python难入门?网站遇反爬?代码不美观?来问问大神怎么做!

想让大神解答你的疑问吗?

 

原文请看公众号:一碗数据汤

 

DataFountain数据竞赛平台本着为数据科学家赋能的原则,开放专属于数据科学家的社区交流平台——DF社区

 

DF社区是以问答与分享为主的数据科学交流社区,就竞赛提分、算法、模型调参、深度学习、NLP等话题,聚集DF平台8万+数据爱好者与数据科学家,打造数据科学交流、学习、进阶的专业圈子。

 

本次活动DF邀请了7位Python大佬为大家分享Python实战经验,解答大家那些关于Python的困惑

 

 

本期大神简介

分享点Python爬虫实战经验_python

姓名:陈祥安

个人简介:高级爬虫工程师,从业多年,有着丰富的爬虫工作经验,从c#语言转入到python语言,擅长各种爬虫技术,熟悉大规模爬虫开发,热爱并喜欢钻研python,期待和大家一起交流。

技术方向:Python爬虫开发

平台 ID:陈祥安

 

大神请回答

Q1:  有没有爬虫框架scrapy的入门教程?

如题

大神分享:

本篇内容从实战出发让我们熟悉如何用scrapy写爬虫。

1、明确目标。

首先,我们要明确我们的爬虫最终的目的是什么,这里我们要做的是爬取糗事百科的热门分类的前10页信息。

2、分析链接的变化

一般我们会通过点击下一页,然后观察地址栏的信息来总结规律。

3、安装scrapy

我们要确保正确安装好了scrapy
针对mac和linux直接运行pip安装即可。

4、创建scrapy工程

下面我们开始创建工程首先我们使用scrapy的第一个命令startproject,
使用方法:scrapy startproject xxx xxx就是你的项目名,这里我们给我们的项目起名qiushibaike。

然后我们会发现了多了一个文件名为qiushibaike的文件夹,然后我们通过命令创建一个事例工程,进入qiushibaike。

然后用下面scrapy的第二个命令genspider。
spider_name就是爬虫的名字,每一个爬虫有一个名字这个名字是唯一的,后面运行的时候也是通过这个名字来运行的,下面的qsbk就是我们的爬虫名字,domain指定爬虫的域也就是爬虫的范围。

5、开始编写spider文件

我们这里使用pycharm把我们的爬虫工程加载进来。

6、修改settings.py文件

7、修改spider.py

8、创建入口文件运行

在项目的根目录下创建一个run.py 来运行我们的工程。

按照提示可以知道链接被关闭访问失败了,这种情况下我们就被反爬了,常见的应对措施是修改headers头。

9、修改中间件加入headers信息

10、再次运行

11、解析网页中所需要的内容

在这里我们使用的解析方法为xpath,通过xpath可以解析出我们需要的内容

12、修改scrapy的日志显示等级方便查看

前面运行过程中我们发现scrapy的日志信息非常的多,不容易找到我们想要的内容,这个时候我们可以通过修改settings.py文件通过修改log的等级,只显示指定类型的log。

13、保存结果到mongodb

mongodb是一个key-value型的数据库,使用起来简单,数据结构是键值对类型,在存储过程中如果表不存在就会创建一个新的表。

 

登录DF社区,查看详细步骤和代码

 

 

Q2:有没有什么爬虫小技巧?

如题

大神分享:

首先问一下大家都使用过哪些python爬虫模块呢?相信大多数人会回复requests或者scrapy吧,嗯我是说大多人。但是针对简单的爬虫我们还是习惯性的使用requests吧,或者升级版的requests_html,此时再使用scrapy,就有种杀鸡焉用宰牛刀的意味了。

现在我们有个简单的要求,去获取该网页http://www.air-level.com/air/beijing/ 的一个表格数据,然后保存起来。


这里由于代码比较简单就说下思路。
首先,我们要成功访问该网页,然后解析网页表格里面的内容,然后存储数据,这里简单我们就存csv好了。思路好了我们就可以写自己代码了,如果对xpath解析数据不很熟悉,应该会稍微耗点时。

经过调查我找到了应对这种静态单页面的更好的方法。。。

那就是pandas模块。提到pandas更多联想到也许是它的数据分析功能,但是在查它的api的时候我发现了一个新的方法。

 

登录DF社区,查看详细步骤和代码

 

 

 

Q3:如何快速入门python异步编程?

如题

大神分享:

asyncio模块提供了使用协程构建并发应用的工具。它使用一种单线程单进程的的方式实现并发,应用的各个部分彼此合作, 可以显示的切换任务,一般会在程序阻塞I/O操作的时候发生上下文切换如等待读写文件,或者请求网络。同时asyncio也支持调度代码在将来的某个特定事件运行,从而支持一个协程等待另一个协程完成,以处理系统信号和识别其他一些事件。

 

登录DF社区,查看详细步骤和代码

 

 

 

 

Q4:  如何使用python下载mp4视频?

如题

大神分享:

一般情况下我们使用爬虫更多的应该是爬数据或者图片吧,今天在这里和大家分享一下关于使用爬虫技术来进行视频下载的方法,不仅可以方便的下载一些体积小的视频,针对大容量的视频下载同样试用。

 

1、requests模块的iter_content方法

这里我们使用的是python的requests模块作为例子,需要获取文本的时候我们会使用response.text获取文本信息,使用response.content获取字节流,比如下载图片保存到一个文件,而对于大个的文件我们就要采取分块读取的方式了

2、断点续传

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时会用到 header请求头的Range字段,这也是现在众多号称多线程下载工具(如 FlashGet、迅雷等)实现多线程下载的核心所在。

 

 

想与大神直接交流?

想让大神为你答疑解惑?

 

 

快要沉溺在数据的海洋里,怎么办?

 

 

分享点Python爬虫实战经验_python_02