热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫python需要什么软件Python爬虫需要学习那些东西?

基础爬虫过程基础的爬虫其实很简单的,主要过程就是:发送请求,并获取响应数据;解析响应数据,获取想要的那部分

基础爬虫过程

基础的爬虫其实很简单的,主要过程就是:发送请求,并获取响应数据;

解析响应数据,获取想要的那部分数据;

存储解析出来的数据;

基础的爬虫事例

比如我们想写一个爬虫程序,自动为我们获取bing搜索首页的备案号。 />bing搜索首页及备案号

1.首先我们就要找到能获取bing首页的URL,这里不用找,就是:https://cn.bing.com/。然后我们就向这个URL发送一个get请求,并得到响应内容。 />用浏览器请求bing搜索首页获取到的响应头 />用浏览器请求bing搜索首页获取到的响应体

2.然后用正则规则去匹配响应中介于“京ICP备”和“号”中间的内容;

3.最终将解析出来的备案号,存储至一个叫bing.txt的文件中;

对应的完整代码如下:

# coding="utf-8"

# 导入requests库,用于实现HTTP请求

import requests

# 导入正则库

import re

# 请求bing搜索首页,并获取响应

response = requests.get("https://cn.bing.com/")

# 响应头部内容

print(response.headers)

#响应体内容

print(response.text)

# 解析响应内容,获取其中我们想要的备案号

number = re.findall(r'京ICP备(.+?)号', response.text)[0]

print(number)

# 将备案号存储到txt文件中

f = open("bing.txt", 'a')

f.write("bing搜索的备案号为:%s" % number)

f.close()

程序运行后最终输入的结果如下(对比一下,是不是和浏览器获取到的内容一致): />程序运行打印的响应头和响应体 />保存至txt文件的备案号

基础爬虫需要学习的内容

基于上面一个简单的实例,应该了解到,基础爬虫部分,我们只需要掌握以下内容即可。

1.获取URL

也就是大家常说的接口,大概意思就是你从哪个URL才能获取到你想要的数据。简单的我们从浏览器中就可以看到。然而如果是想要获取App的数据呢?所以这里还需要需求一个基本的抓包工具的使用(常见的抓包工具有Fiddler、Wireshark等,新手推荐用Fiddler) />

2.模拟发送基本的请求

当获取到URL之后,我们需要模拟请求一下,看看是否可行。这里推荐大家写代码之前先用postman工具进行模拟请求,请求没问题后再写代码。学习两种常见请求类型的传参方式(get请求、post请求)。并且掌握请求中的基本参数,比如:user-agent、host、origin、COOKIE、表单参数等。 />使用postman进行模拟请求

3.数据解析

数据解析方面就比较固定了,掌握基本的正则匹配、Beautifulsoup、Xpath、json解析即可。其中正则匹配性能最好,但是研究正则规则比较麻烦,Beautifulsoup语法人性化,最简单,但是性能差一些,所以我一般选这种的xpath解析。推荐大家安装浏览器插件Xpath Helper,可以直接在浏览器中先模拟解析。 />Xpath Helper插件进行模拟解析

4.数据存储

数据存储最常见的当然是存储至数据库了,当然也有存储值excel、存储为json文件等等的。这里只需要掌握python操作数据库就够走遍天下了,并且有精力的情况下最好将MySQL、Sqlite3、Mongodb、Redis都学习一下。

爬虫进阶需要学习的内容

了解了上面整个过程后,基本写一下基础的爬虫就没问题了。但是实际项目中往往还需要一些进阶的内容(这也就是所谓的入门简单,深入还是有一些细碎的知识):攻克对方的反爬虫,这也是爬虫的重中之重,这一步突破不了,后面基本免谈;

提高爬虫的效率,这里主要是突破反爬虫限制后,进一步提升数据获取的速度;

提升爬虫程序的稳定性,保证爬虫可以长久运行不出错;

常见的反爬虫内容上的反爬虫,比如内容中加了很多和主要书籍无关的数据,浏览器中不会显示,但是影响我们代码解析,又或者用图片代替文本等等。所以需要我们熟练的灵活使用各种解析特性,必要时还需要来个图像识别什么的。

机器验证,常见的就是验证码了,当然还有IP访问频率限制等。这里需要学习基本的代理池搭建(代理池的搭建可以参考我这篇文章),图像识别,甚至机器学习等。MeetUp:利用Python打造免费、高可用、高匿名的IP代理池​zhuanlan.zhihu.comv2-50c40440530bc8bcb361293572bdb634_180x120.jpg

3. 请求上的反爬虫,比如请求中需要需要携带一些变化的参数,这部分参数可能是登录的COOKIE信息,可能是加密算法生成的参数等等。需要我们学习模拟登录,js调试,甚至App逆向分析等。

备注:有时候我们也不能硬碰硬的去分析那些反爬虫,大家都是程序员,要学会找漏洞,少掉一些头发哈~所以这里面有个基本的思路,具体可以参考我这篇文章MeetUp:抖音短视频无水印解析爬虫,换个角度让爬虫更简单​zhuanlan.zhihu.comv2-785c5acb264fc0467a60b9f7fd519ffd_180x120.jpg

提高爬虫效率

学会写基本的爬虫调度,意思就是调度请求、解析、数据保存这几件事情的一个方法。然后配合多进程和多线程来提升效率,多线程方面,爬虫上推荐大家多使用协程。有时候问了进一步提升效率和爬虫的稳定性,还会将不同的事情放在不用的服务器上去完成(分布式爬虫部署),比如调度一个中央服务器,然后分配A服务器去完成请求,分配B去进行数据解析,分配C去进行数据下载保存等等。

提升爬虫健壮性

这个在大型项目中是尤为重要的,比如我们有1000万条数据需要获取,但是获取到500万条的时候程序出错了,这时候怎么处理呢?是修复BUG,放弃这500万数据,重新开始呢?还是断点继续呢?基本的我们要知道哪里可能出错,添上对应的错误捕获并记录哪条数据出了什么错误,后续可针对出错的数据再单独爬取。如果想要做的更智能化一点,我们就需要记录程序再哪个节点出错的,当我们修复BUG后,程序下次运行时,程序能自动从此处开始。关于断点呢,具体业务得具体对待,没有固定的方式,不过有几个通用的点可能都会用到,那就是数据重复排查,通过是否重复来判断是否继续。常见的去重就有:数据库去重(查数据是否存在)、缓存去重(利用Redis中的set类型)、内存去重(HashSet、Bit-Map等等)

本人产品汪一枚,爱好设计,业余Coding,总结的不好还望大佬轻喷!同时也欢迎大家一起交流学习~


推荐阅读
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
author-avatar
周月醉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有