手把手较你编写Python爬虫程序-不要干坏事哦
首先我们知道互联网简单来说是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前。
如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。
本文主要内容,以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容。本文受众,没写过爬虫的萌新。
入门
0.准备工作
需要准备的东西: Python、scrapy、一个IDE或者随便什么文本编辑工具。
1.技术部已经研究决定了,你来写爬虫。
随便建一个工作目录,然后用命令行建立一个工程,工程名为miao,可以替换为你喜欢的名字。
scrapy startproject miao
随后你会得到如下的一个由scrapy创建的目录结构
在spiders文件夹中创建一个python文件,比如miao.py,来作为爬虫的脚本。
内容如下:
2.跑一个试试?
如果用命令行的话就这样:
cd miaoscrapy crawl NgaSpider
你可以看到爬虫君已经把你坛星际区第一页打印出来了,当然由于没有任何处理,所以混杂着html标签和js脚本都一并打印出来了。
解析
接下来我们要把刚刚抓下来的页面进行分析,从这坨html和js堆里把这一页的帖子标题提炼出来。
其实解析页面是个体力活,方法多的是,这里只介绍xpath。
0.为什么不试试神奇的xpath呢
看一下刚才抓下来的那坨东西,或者用chrome浏览器手动打开那个页面然后按F12可以看到页面结构。
每个标题其实都是由这么一个html标签包裹着的。举个例子:
<a id="t_tt1_33" class="topic" href="/read.php?tid=10803874">[合作模式] 合作模式修改设想</a>
可以看到href就是这个帖子的地址(当然前面要拼上论坛地址),而这个标签包裹的内容就是帖子的标题了。
于是我们用xpath的绝对定位方法,把class='topic'的部分摘出来。
1.看看xpath的效果
在最上面加上引用:
from scrapy import Selector
把parse函数改成:
再次运行就可以看到输出你坛星际区第一页所有帖子的标题和url了。
递归
接下来我们要抓取每一个帖子的内容。
这里需要用到python的yield。
yield Request(url=url, callback=self.parse_topic)
此处会告诉scrapy去抓取这个url,然后把抓回来的页面用指定的parse_topic函数进行解析。
至此我们需要定义一个新的函数来分析一个帖子里的内容。
完整的代码如下:
到此为止,这个爬虫可以爬取你坛第一页所有的帖子的标题,并爬取每个帖子里第一页的每一层楼的内容。
爬取多个页面的原理相同,注意解析翻页的url地址、设定终止条件、指定好对应的页面解析函数即可。
Pipelines——管道
此处是对已抓取、解析后的内容的处理,可以通过管道写入本地文件、数据库。
0.定义一个Item
在miao文件夹中创建一个items.py文件。
此处我们定义了两个简单的class来描述我们爬取的结果。
1. 写一个处理方法
在miao文件夹下面找到那个pipelines.py文件,scrapy之前应该已经自动生成好了。
我们可以在此建一个处理方法。
2.在爬虫中调用这个处理方法。
要调用这个方法我们只需在爬虫中调用即可,例如原先的内容处理函数可改为:
3.在配置文件里指定这个pipeline
找到settings.py文件,在里面加入
这样在爬虫里调用
的时候都会由经这个FilePipeline来处理。后面的数字400表示的是优先级。
可以在此配置多个Pipeline,scrapy会根据优先级,把item依次交给各个item来处理,每个处理完的结果会传递给下一个pipeline来处理。
可以这样配置多个pipeline:
Middleware——中间件
通过Middleware我们可以对请求信息作出一些修改,比如常用的设置UA、代理、登录信息等等都可以通过Middleware来配置。
0.Middleware的配置
与pipeline的配置类似,在setting.py中加入Middleware的名字,例如
1.破网站查UA, 我要换UA
某些网站不带UA是不让访问的。
在miao文件夹下面建立一个middleware.py
这里就是一个简单的随机更换UA的中间件,agents的内容可以自行扩充。
2.破网站封IP,我要用代理
比如本地127.0.0.1开启了一个8123端口的代理,同样可以通过中间件配置让爬虫通过这个代理来对目标网站进行爬取。
同样在middleware.py中加入:
很多网站会对访问次数进行限制,如果访问频率过高的话会临时禁封IP。
如果需要的话可以从网上购买IP,一般服务商会提供一个API来获取当前可用的IP池,选一个填到这里就好。
一些常用配置
在settings.py中的一些常用配置
我就是要用Pycharm
如果非要用Pycharm作为开发调试工具的话可以在运行配置里进行如下配置:
Configuration页面:
Script填你的scrapy的cmdline.py路径,比如我的是
/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py
然后在Scrpit parameters中填爬虫的名字,本例中即为:
crawl NgaSpider
最后是Working diretory,找到你的settings.py文件,填这个文件所在的目录。
示例:
按小绿箭头就可以愉快地调试了。
【学习课程推荐】
python优质课程:https://www.bilibili.com/video/BV1mS4y1L7Xc
python项目:
【Python项目】用Python编写的坦克大战游戏,好玩又锻炼,手把手带领你入门python语言
Python安装_最详细正确的安装教程及环境配置搭建,新手半小时完成
价值9660元Django框架全套_Python实战Django框架22年全网超火的架构_附:源码-课件
【越用越爽】Python爬虫教程基础入门至精准就业_百万教程极力推荐python爬虫全套
Java基础优质课程:java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受
Java项目:
【FlappyBird游戏项目】手把手用Java教你做游戏_FlappyBird飞翔的小鸟
【java项目】白嫖6套Java小游戏教程免费分享帮你解决期末作业烦恼!(附源码课件)
【王者荣耀项目】YYDS!!王者荣耀被大佬24小时开发成功-开发王者如此简单_王者荣耀游戏_java项目
手把手较你编写Python爬虫程序-不要干坏事哦相关推荐
- 手把手教你入门Python爬虫(二)
手把手教你入门Python爬虫 前言 在上一篇文章中,我们讲解到了基础的计算机网络知识,并完成了"爬取豆瓣Top250电影信息"的项目.那么这一次,作者将带领大家完成" ...
- python网络爬虫的基本步骤-黑客基础 编写Python爬虫入门步骤
原标题:黑客基础 编写Python爬虫入门步骤 信息时代,数据就是宝藏.数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码. 黑客花无涯 带你走进黑客 ...
- python爬虫步骤-黑客基础 编写Python爬虫入门步骤
原标题:黑客基础 编写Python爬虫入门步骤 信息时代,数据就是宝藏.数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码. 黑客花无涯 带你走进黑客 ...
- 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...
- 如何编写Python爬虫
Python是一种非常流行的编程语言,用于编写各种类型的应用程序,包括网络爬虫.在本文中,我们将介绍如何使用Python编写一个简单的网络爬虫. 步骤1:安装Python 首先,您需要安装Python ...
- 手把手教你利用 python 爬虫分析基金、股票
手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...
- 使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站
使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站 本次测试案例参考厦门大学数据库实验室 链接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建 ...
- 视频教程-手把手带你学会python爬虫-Python
手把手带你学会python爬虫 曾在某大型公司大型互联网任职多年,在公司主要从事移动端开发.全栈开发.主要技术栈是Android.Java.Python.爬虫.Linux等等. 赵庆元 ¥99.00 ...
- python正则表达式提取电话号码_利用正则表达式编写python 爬虫,抓取网页电话号码!...
利用正则表达式编写python 爬虫,抓取网页联系我们电话号码!这里以九奥科技(www.jiuaoo.com)为例,抓取'联系我们'里面的电话号码,并输出. #!/usrweilie/bin/pyth ...
- python爬取换页_一个可识别翻页的简易Python爬虫程序
同学拿出一个需求:从某课程教学网站上爬取所有课程的主页面,以及课程简介栏目内容. 于是在之前做的那个练手级的Python爬虫程序中进行修改,最终实现了该功能.与之前那个爬虫不同,这里每一个大类的课程下 ...
最新文章
- Android Java使用JavaMail API发送和接收邮件的代码示例
- 【转】QT事件传递与事件过滤器
- 教你用Python爬虫自制有道翻译词典
- 260. Single Number III
- Linux之du df free:du文件大小 df分区使用 free内存
- ARM的流水线与PC值的关系
- SAP成都研究院数字创新空间小伙伴们在2020 SAP上海DKOM
- Fiori hide Header text in task list
- 每日干货丨C语言数组知识点总结
- oa服务器维护,办公系统维护,维护oa系统的方法
- 集成海康威视Sadp SDK实现重置密码
- 基于JavaSwing+mysql的酒店管理系统设计和实现
- 001.UG_NX概述
- Leetcode惊现马化腾每天刷题?为啥大佬都这么努力!
- 从京东618秒杀聊聊秒杀限流的多种实现!
- excel自动汇总多表格数据
- android内置so库,带so库的apk正确内置到system/app详解
- 协众信息技术平面海报设计,你知道多少
- centos挂载u盘只读_centos挂载u盘只读_针对优盘在linux下文件只读的解决方案
- 最高效寻找重复数据,如何高效率的查找到数组中的重复值
热门文章
- 陕西2020行政区划调整_陕西省最新行政区划,厉害了大陕西
- BC26:使用MQTT对接阿里云平台
- mtk刷机工具sp flash tool_qpst刷机(翻到高中刷机时的记录,想来qpst对现在玩机的人也有用吧...
- delphi android 2017,Delphi春天将来临,Android遇到XE7我也是醉了,Hello World
- Linux下常用的优秀软件
- ffmpeg中使用screen capture recorder录音的问题
- limesurvey php5.2,WinXP下安装LimeSurvey(php环境搭建及网站程序安装)
- 单片机定时器一1ms12MHz_单片机原理及接口技术笔记1单片机概述
- 现代优化算法 之 遗传算法
- 换ip 电脑ip切换 ip修改 支持xp win7 win10