ctf up怎么写 write_??零基础写网络爬虫的思路??

4e42d8ed5d0585a4fc11e3c12b500eee.png

网络爬虫,用一句话简单总结,就是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。写这篇文章的初衷是有个知友私信我说,模仿了很多网上用Python写爬虫的例子,但到了需要自己动手写爬虫的时候又不知道怎么写了。我觉得出现这种情况还是很正常的,至少我个人是这么过来的。这篇文章仅供初学者写爬虫程序时作为一个参考,毕竟本人已经很久没写过爬虫程序了,但爬虫程序的大体框架我还是很清晰的,此篇展示的是我对爬虫的一些理解。之前写过的一些爬虫程序PythonCrawler,有兴趣的朋友可以看看,找找自信这些代码现在看来写的确实挺烂的 。

写爬虫遵循的基本框架

我自己在写爬虫时一般基本遵循下面的框架形式,按照这个框架来编写代码。

d965d4a4cbebb693d79946e5f377c28c.png

演示实例

通过对[ONE]这个网站的爬取来演示上述模块的编写,ONE网站的内容展示如下图所示。

0e22ea8aec1a23c893bc5dd8b5fcafa4.png

而数据我只爬取一张图片和一句箴言,备注(该演示远非最佳实践,只是为了演示框架流程)

  • url调度模块编写

通过对ONE网站的分析,发现它的翻页就是在url后面的数字上加一进入下一页。

ROOT_URL = "http://wufazhuce.com/one/"
URL_NUM = 14 #14页之后才开始有数据def yield_url(ROOT_URL, URL_NUM):return ROOT_URL + str(URL_NUM)
  • 网页下载模块编写
import requests as rqdef get_html(url):return rq.get(url).content.decode("utf-8")
  • 数据抽取模块编写

通过对图片和箴言查看元素可知相关代码镶嵌情况。

c8e47b879eeb393d4b50476f2c129a17.png

fb01d33a09fc8d84dd56d356476f42ff.png

因此可以编写数据抽取模块

import redef get_data(html):img_url_regex = re.compile('<img src="(.*?)" alt="" />')cite_regex = re.compile('<div class="one-cita">(.*?)</div>', re.S)img_url = re.findall(img_url_regex, html)[0]cite = re.findall(cite_regex, html)[0].strip()return img_url, cite                        
  • 数据存储模块编写
def save_data(img_url, cite, URL_NUM):with open("./{}.jpg".format(URL_NUM), "wb") as fp:fp.write(rq.get(img_url).content)with open("./cite{}.txt".format(URL_NUM), "w") as fp:fp.write(cite)return URL_NUM + 1

整合所有模块输出爬取结果

import re
import requests as rqROOT_URL = "http://wufazhuce.com/one/"
URL_NUM = 14def yield_url(ROOT_URL, URL_NUM):return ROOT_URL + str(URL_NUM)def get_html(url):return rq.get(url).content.decode("utf-8")def get_data(html):img_url_regex = re.compile('<img src="(.*?)" alt="" />')cite_regex = re.compile('<div class="one-cita">(.*?)</div>', re.S)img_url = re.findall(img_url_regex, html)[0]cite = re.findall(cite_regex, html)[0].strip()return img_url, cite                        def save_data(img_url, cite, URL_NUM):with open("./{}.jpg".format(URL_NUM), "wb") as fp:fp.write(rq.get(img_url).content)with open("./cite{}.txt".format(URL_NUM), "w") as fp:fp.write(cite)return URL_NUM + 1def main(ROOT_URL, URL_NUM, number):for _ in range(number):url = yield_url(ROOT_URL, URL_NUM)html = get_html(url) img_url, cite = get_data(html) URL_NUM = save_data(img_url, cite, URL_NUM)if __name__ == "__main__":try:main(ROOT_URL, URL_NUM, 20)except:pass

结果展示:

0a903bc88dab01536b0f704d830eaae7.png

总结

本文的目的只是为了让初学者对写爬虫的大体流程有较为清晰的了解。天高任鸟飞,海阔凭鱼跃!每个人心中的爬虫框架(流程)各异,实现方法各异自由发挥空间极大,但有一点务必注意那就是遵守中华人民共和国的法律。

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

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

相关文章

VMwarestation环境下的centos7(Minimal)静态ip配置(桥接模式)

笔者本来是为了用三台centos7&#xff08;最小化安装版本&#xff09;的虚拟机搭建一个Zookeeper的环境&#xff0c;但是在搭建的过程中遇到了一些问题&#xff0c;遂记录之。 为了便捷&#xff0c;除了希望三台配置了静态ip的虚拟机可以和宿主机之间互相ping通之外&#xff0…

技术系统进化法则包括_技术系统进化论,模式五、技术集成以增加系统功能

阿奇舒勒TRIZ理论三个核心思想&#xff1a;1、无论是一个简单产品还是复杂的技术系统&#xff0c;其核心技术的发展都是遵循着客观的规律发展演变的&#xff0c;即具有客观的进化规律和模式&#xff1b;2、各种技术难题和矛盾的不断解决是推动这种进化过程的动力&#xff1b;3、…

zookeeper一键启动关闭JAVA_HOME在PATH中找不到报错踩坑记

最近看了尚硅谷的zookeeper教程&#xff0c;在集群环境搭建中&#xff0c; 有这么一个脚本zk.sh用来一键启动和查询 #!/bin/bash case $1 in "start"){ for i in zknode2 zknode3 zknode4 doecho ---------- zookeeper $i 启动 ------------ ssh $i "/opt/modu…

mysql if exists用法_MySQL中EXISTS的用法

比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FROM Orders o WHERE o.CustomerIDc.CustomerID)这里面的EXISTS是如何运作呢&#xff1f;子查询返回的是OrderId字段&#xff0c;可是外面的查询要找的是Cus…

项目入口_新进展!石家庄地铁项目长安公园站出入口全部封顶

(通讯员 韩静娟)5月3日&#xff0c;伴随着长安公园站C出入口最后一方混凝土的浇筑到位&#xff0c;由中铁隧道局路桥公司承建的石家庄地铁2号线06标长安公园站出入口全部封顶&#xff0c;为石家庄地铁二号线顺利开通打下了坚实的基础。石家庄地铁2号线作为石家庄市南北向骨干线…

一直显示数据格式错误_Excel数据分析,新手最容易犯的10个建表错误

在使用Excel 建立数据表时&#xff0c;养成规范、良好的制表习惯至关重要&#xff0c;这不仅有益于后期数据分析的顺利进行&#xff0c;而且能体现专业素质。下面介绍一些新手容易犯的规范上的错误。1.随意插入空格很多新手在制表时容易随意插入空格&#xff0c;认为这样可以更…

python selenium 怎么查找modal悬浮窗的内容_python教程:五分钟从pubmed down几万篇文献...

小编有话说&#xff1a;hello guys!昨天推送的stata做图教程您学会了吗&#xff1f;有任何疑问欢迎后台咨询我们热心的罗仔。今天换个口味&#xff0c;学学python自动化。作为科研小达人&#xff0c;不学一些旁门左道傍身怎么行&#xff01;今天我们扒一扒pubmed&#xff0c;如…

安装git安装路径在哪_Atom插件安装与git的安装配置

一、Atom 插件在线安装1. 安装插件language-asciidoc 》语法高亮asciidoc-preview 》实时预览在dos 下通过cmd命令安装插件打开dos窗口 window可用快捷键 winr 再输入cmd安装language-asciidoc 输入 apm install language-asciidoc 如果apm不能识别请用 npm install language-…

编制一个c语言成绩记录簿_C语言基础知识点模拟试题

一、单选题(每题2分&#xff0c;共25题&#xff0c;共50分)执行以下程序后&#xff0c;输出结果是( )int a 255;char c;ca;printf("%d",c);A)255 B)0 C)-3 D)-1有以下程序#include void main( ){ FILE *fp; int i,k0,n0; fpfopen("d1.dat&…

闪灯什么意思_开夜车被对方闪了一下是什么意思?老司机:灯语都不懂,晚上别开车...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。 注&#xff1a;本文转载自网络&#xff…

android radiogroup 获取点击位置_屏幕连点器,解放双手[Android]

这里是“微友集市”&#xff0c;我们坚持分享优质的资源&#xff0c;让更多人能用到更好的资源&#xff0c;少花冤枉钱。如果你有什么需要&#xff0c;可以给我们留言&#xff0c;我们会努力去为你寻找&#xff0c;或许你需要的&#xff0c;也是别人需要的...1自动点击器 是一款…

apache poi excel显示 base64 图片_数据处理之带图片Excel数据处理解惑

小编最近项目中遇到一个大批量Excel数据提取的问题&#xff0c;因为Excel数据中含有图片&#xff0c;所以在程序处理时遇到了困难&#xff0c;小编花了点时间才解决了这个问题&#xff0c;所以在这里mark一下。1 问题描述首先来描述一下数据处理的需求&#xff0c;如下图所以是…

mysql加锁后怎么解除_Mysql查看死锁与解除死锁的深入讲解

前言前段时间遇到了一个Mysql 死锁相关的问题&#xff0c;整理一下。问题描述&#xff1a;Mysql 的修改语句似乎都没有生效&#xff0c;同时使用Mysql GUI 工具编辑字段的值时会弹出异常。什么是死锁在解决Mysql 死锁的问题之前&#xff0c;还是先来了解一下什么是死锁。死锁是…

mysql查询工具哪个好_一个比较实用的数据库查看管理工具

个人从业四年多&#xff0c;和数据库打交道不计其数&#xff0c;特别是在之前做企业级应用系统的时候&#xff0c;整天就是在业务、数据和程序之间穿梭&#xff0c;那个数据查的呀&#xff0c;平均每天有40% 左右的时间都在手工的写sql进行数据的查询。刚开始&#xff0c;通过数…

mysql运维机制_《MySQL运维内参》节选 | InnoDB日志管理机制(一)

引 子InnoDB 存储引擎是支持事务ACID特性的&#xff0c;它是以二十多年前IBM的一篇著名文章《ARIES:A Transaction Recovery Method Supporting Fine-Granularity Locking and PartialRollbacks Using Write-Ahead Logging》为理论基础&#xff0c;大多数关系型数据库的实现都是…

数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论

mysql的逻辑分层&#xff1a;连接层 服务层 引擎层 存储层引擎层主要分为两类&#xff1a;InnoDB、MyIsam(使用show engines;查看)InnoDB是事务优先的&#xff0c;会进行行锁&#xff0c;适合高并发操作MyIsam是性能优先的&#xff0c;进行表锁sql优化点&#xff1a;等待时间长…

检验int值在list中是否存在_R语言统计与绘图:卡方检验

卡方检验在计数资料中的应用&#xff0c;包括推断两个总体率或构成比之间有无差别、多个总体率或构成比之间有无差别、多个样本率间的多重比较、两个分类变量之间有无关联性、多维列联表的分析和频数分布拟合优度的卡方检验。选自&#xff1a;周支瑞老师下面分别介绍计数资料怎…

mysql in 多个字段_MySQL如何同时自增自减多个字段

“本文将带大家聊一下如何同时自增自减多个字段”前言最近小Q同学去面试了&#xff0c;然后就问了题目的问题&#xff0c;如何同时自增自减多个字段。小Q一时回答不出来&#xff0c;最终的结果就是回家等通知....关于这个问题咔咔来给小Q简单的进行解答一下。一、ThinkPHP框架实…

wxpython 调用子窗口_wxpython入门第一步(简单例子)

在这部分wxPython教程中&#xff0c;我们将创建一些简单的例子。简单的例子​ 我们从一个非常简单的例子开始。我们的第一个脚本将只显示一个小窗口。它不会做太多事情。我们将逐行分析这个脚本。# simple.pyimport wxapp wx.App()frame wx.Frame(None, )frame.Show()app.Mai…

orderd mysql_Oracle入门教程:leading vs ordered hint

odered hint 可以指示oracle 使用from 关键字后面的表的顺序进行join连接&#xff01;cbo会优先按照from 后面的表的顺序来进行join&#xff0c;当统计leading hint 可以指示Oracle使用leading 中指定的表作为驱动表,比如 正常的访问计划如下SCOTT> select e.ename, hiredat…