手把手较你编写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项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48018.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缅怀清明-记爷爷这一生

(农村老宅) &#xff08;点击即可收听&#xff09; 桃花盛开正清明,门前小路依旧在,唯有不见已故人 转瞬间,又是一年一度清明节 年少,听雨歌楼上,红烛昏罗帐,不懂清明时节的庄严与肃穆,清朗,明净 如今,人到中年,听雨客舟中,江阔云低,断雁叫西风 世事无常,历经春夏秋冬,生老病死…

我,大厂P9,找不到工作

作者| 老W 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) K哥写在前面的话&#xff1a;这是一位读者投稿&#xff0c;读者老W讲述了自己从大厂P9失业后、再就业的故事&#xff0c;并总结了自己的心路历程&#xff0c;很真实的记录与思考&#xff0c;值得大家借…

2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友

最近沸沸扬扬的就是核酸疫情的事情&#xff0c;突然之间&#xff0c;一下子全国都放开了&#xff0c;很不适应。 大宝在上幼儿园中班&#xff0c;上上个星期&#xff0c;学校的政策&#xff0c;还是没有核酸证明不得入校。 而上周末发的通知&#xff0c;已经是不得在外做核酸…

如何让 ChatGPT 更懂你?新功能 Custom Instructions 尝试

对比 我们先来做一个对比实验。这里咱们让 ChatGPT 执行一个很简单的任务 —— 介绍一下 AI 生成内容&#xff08;AIGC&#xff09;。为了能够让 ChatGPT 查询资料&#xff0c;咱们给它提供了 Web Pilot 插件。但是 ChatGPT 并没有主动调用插件&#xff0c;而是直接给出了解释。…

修改jsp代码之后浏览器报500错误问题以及解决方法

自己在写JavaWeb项目的时候&#xff0c;遇见了一个特别的bug&#xff0c;找个半天资料也没有解决掉&#xff0c;现在将这个bug以及解决方法抛出来&#xff0c;希望可以帮助到大家。 <div class"book" id"recommend_book_lunbo"><div class"b…

互联网巨头“赢家通吃”,会产生哪些严重后果?

导读&#xff1a;对美国互联网巨头的文化思考。 作者&#xff1a;苏金树&#xff0c;中国计算机学会互联网专委会主任&#xff0c;国防科技大学教授 来源&#xff1a;大数据DT&#xff08;ID&#xff1a;hzdashuju&#xff09; 01 “赢家通吃”、多边平台会产生“创造性毁灭”的…

《程序员》9月刊推荐:移动应用产业链大势图

记者 / 常政 对于移动应用 , 业界的态度和对 20 世纪 90 年代末的互联网截然不同&#xff0c;不再犹疑观望&#xff0c;谁也不愿错失成为下一个 Facebook 或者阿里巴巴的机会&#xff0c;国企、互联网寡头、风险投资商、创业者纷纷涌入&#xff0c;一时间泥沙俱下&#xff0c;…

谈我所经历的区块链历程

这两天感冒发烧&#xff0c;无法集中精力继续分享记录类文章&#xff0c;就聊聊本人所经历的区块链发展。纵观自己经历的区块链&#xff0c;倏忽之间&#xff0c;感觉过了好多年&#xff0c;理论和技术都在蓬勃。 初闻区块链 2015年底&#xff0c;工作间隙跟同事在公司外闲聊&…

混沌大学_学习目录

目录 2019 年 研习社 商学院 创新社 2018年 研习社 创新院 商学院 2017 年 混沌大学 精品课 2016年 混沌大学 说明一下哦&#xff0c;这里是为自己整理的课程目录&#xff0c;学习笔记我记录在简书里面了&#xff0c;因为我发现这里不能太频繁的更新&#xff0c;有…

人工智能的发展方向与机遇

编辑导读&#xff1a;近几年人工智能大热&#xff0c;几乎所有人都在讨论关于人工智能相关的话题&#xff0c;同时各个领域的突破也不少。本文作者对当前人工智能的目前发展情况进行了梳理&#xff0c;并分享了自己对人工智能未来的一些猜测与看法&#xff0c;与大家分享。 01 …

“构建全球科技创新生态科技思想家”王煜全如是说(2019.4.23清水湾思享会第13期嘉宾)...

内容来源&#xff1a; 2019年4月23日&#xff0c;主题为“人工智能与未来科技”的香港科大“清水湾”思享会【第13期】隆重举办&#xff0c;海银资本创始合伙人、著名科技投资人王煜全先生做了主旨为“构建全球科技创新生态”的精彩分享。 一、科技创新时代的迭代 二三十年代的…

深圳台电:联合国的“沟通”之道

深圳台电的故事&#xff0c;让我很感慨&#xff0c;“数字化”确实给我们打开了一扇门。这家企业一直按照传统的思路和模式来做硬件&#xff0c;有了远程的云的支持、人工智能的支持&#xff0c;产品就有了“软硬一体”的科技含量。以前不能提供的服务&#xff0c;现在能提供了…

王煜全:AI独角兽必须进行业务升级 否则必死无疑

作者&#xff1a;丁广胜 出品&#xff1a;网易科技《5G访谈》栏目组 “你难道相信中国经济会连续下行吗&#xff1f;这不可能&#xff0c;我觉得认同这个观点的人前瞻性太少了&#xff0c;在人云亦云&#xff0c;你会发现现在硬科技在井喷&#xff0c;而中国将会是最大的受益者…

linux 下网络编程 聊天室项目

服务端使用框架&#xff1a;非阻塞轮询&#xff1b; 客户端使用框架&#xff1a;多线程&#xff1b; 使用数据库&#xff1a;mysql&#xff1b; 实现主要功能&#xff1a; 1.注册&#xff1b; 2.登录&#xff1b; 3.群聊&#xff1b; 4.私聊&#xff1b; 5.查看聊天记录…

Netty网络聊天室之基础网关搭建

前言 最近在学习Netty框架&#xff0c;使用的学习教材是李林锋著的《Netty权威指南》。国内关于netty的书籍几乎没有&#xff0c;这本书算是比较好的入门资源了。 我始终觉得&#xff0c;学习一个新的框架&#xff0c;除了研究框架的源代码之外&#xff0c;还应该使用该框架自…

PC端聊天机器人界面(html实现)

实现效果&#xff1a; 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-scale1"><title>PC机…

【HTML5期末大作业】制作一个简单HTML我的班级网页(HTML+CSS+JS)

&#x1f4c2;文章目录 一、&#x1f468;‍&#x1f393;网站题目二、✍️网站描述三、&#x1f4da;网站介绍四、&#x1f4a0;网站演示五、⚙️ 网站代码&#x1f9f1;HTML结构代码&#x1f492;CSS样式代码 六、&#x1f947; 如何让学习不再盲目七、&#x1f381;更多干货…

html5网页制作代码-我的班级网页 HTML期末大作业 学校班级网页制作模板

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;校园班级网页设计 | 我的班级网页 | 我的学校 | 校园社团 | 校园运动会 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;…

大模型中的“罗翔老师”来了!

明敏 发自 凹非寺量子位 | 公众号 QbitAI 大模型中的“罗翔老师”&#xff0c;出现了&#xff01; 北大团队打造的法律大模型ChatLaw&#xff0c;发布即冲上知乎热搜第一。 它具备大模型能力和充足法律知识&#xff0c;能给法律小白们答疑解惑、提供法律建议。 比如针对网络热议…