软件开发定制定制Python爬虫简单入门教程

这篇 Python 软件开发定制定制教程主要讲解以下 5 部分

  1. 软件开发定制定制软件开发定制定制了解网页结构;
  2. 使用 requests 软件开发定制定制库抓取网站数据;
  3. 使用 Beautiful Soup 解析网页;
  4. 软件开发定制定制清洗和组织数据;
  5. 软件开发定制定制爬虫攻防战;

了解网页结构

软件开发定制定制网页一般由三部分组成,分别是 HTML(软件开发定制定制超文本标记语言)、CSS(软件开发定制定制层叠样式表)和 JScript(活动脚本语言)。

  • HTML 负责定义网页的内容
  • CSS 负责描述网页的布局
  • JavaScript 负责网页的行为

HTML

HTML 是网页的基本结构,它相当于人体的骨骼结构。网页中同时带有“<”、“>”符号的都属于 HTML 标签。常见的 HTML 标签如下所示:

<!DOCTYPE html> 声明为 HTML5 文档<html>..</html> 是网页的根元素<head>..</head> 元素包含了文档的元(meta)数据,如 <meta charset="utf-8"> 定义网页编码格式为 utf-8。<title>..<title> 元素描述了文档的标题<body>..</body> 表示用户可见的内容<div>..</div> 表示框架<p>..</p> 表示段落<ul>..</ul> 定义无序列表<ol>..</ol>定义有序列表<li>..</li>表示列表项<img src="" alt="">表示图片<h1>..</h1>表示标题<a href="">..</a>表示超链接

代码如下 

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Python</title>
  6. </head>
  7. <body>
  8. <a href="https://blog.csdn.net/qq_45719125">点击访问</a>
  9. <h1>CSDN mei0351</h1>
  10. <h2>Python爬虫</h2>
  11. <div>
  12. <p>认识网页结构</p>
  13. <ul>
  14. <li>HTML</li>
  15. <li>CSS</li>
  16. <li>JavaScript</li>
  17. </ul>
  18. </div>
  19. </body>
  20. </html>

 关于爬虫的合法性

 几乎每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据。
以B站为例,在浏览器中访问 ,如图所示。

 User-Agent:*

Disallow:/

除前面指定爬虫外,不允许其他爬虫获取任何数据。

使用requests库请求网站 

网页请求的过程分为两个环节:

  1. Request (请求):每一个展示在用户面前的网页都必须经过这一步,也就是向服务器发送访问请求。
  2. Response(响应):服务器在接收到用户的请求后,会验证请求的有效性,然后向用户(客户端)发送响应的内容,客户端接收服务器响应的内容,将内容展示出来,就是我们所熟悉网页请求的方式也分为两种:
  3. GET:最常见的方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式,响应速度快。
  4. POST:相比 GET 方式,多了以表单形式上传参数的功能,因此除查询信息外,还可以修改信息。

使用GET方式抓取数据

在Pycharm中输入如下代码 

  1. import requests #导入requests包
  2. url = 'http://www.bilibili.com/'
  3. strhtml = requests.get(url) #Get方式获取网页数据
  4. print(strhtml.text)

 

使用 POST 方式抓取数据 

使用BeautifulSoap解析网站

清洗和组织数据

爬虫攻防战

爬虫是模拟人的浏览访问行为,进行数据的批量抓取。当抓取的数据量逐渐增大时,会给被访问的服务器造成很大的压力,甚至有可能崩溃。换句话就是说,服务器是不喜欢有人抓取自己的数据。那么,网站方面就会针对这些爬虫者,采取一些反爬策略。
服务器第一种识别爬虫的方式就是通过检查连接的 useragent 来识别到底是浏览器访问,还是代码访问的。如果是代码访问的话,访问量增大时,服务器会直接封掉来访 IP。
那么应对这种初级的反爬机制,我们应该采取何种举措?
在进行访问时,我们在开发者环境下不仅可以找到 URL、Form Data,还可以在 Request headers 中构造浏览器的请求头,封装自己。服务器识别浏览器访问的方法就是判断 keyword 是否为 Request headers 下的 User-Agent。

 因此,我们只需要构造这个请求头的参数。创建请求头部信息即可,代码如下:

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
response = request.get(url,headers=headers)

 写到这里,很多读者会认为修改 User-Agent 很太简单。确实很简单,但是正常人1秒看一个图,而个爬虫1秒可以抓取好多张图,比如 1 秒抓取上百张图,那么服务器的压力必然会增大。也就是说,如果在一个 IP 下批量访问下载图片,这个行为不符合正常人类的行为,肯定要被封 IP。
其原理也很简单,就是统计每个IP的访问频率,该频率超过阈值,就会返回一个验证码,如果真的是用户访问的话,用户就会填写,然后继续访问,如果是代码访问的话,就会被封 IP。这个问题的解决方案有两个,第一个就是常用的增设延时,每 3 秒钟抓取一次,代码如下: 

 import time
time.sleep(3)

 但是,写爬虫的目的是为了高效批量抓取数据,这里设置 3 秒钟抓取一次,效率未免太低。其实,还有一个更重要的解决办法,那就是从本质上解决问题。不管如何访问,服务器的目的就是查出哪些为代码访问,然后封锁 IP。解决办法:为避免被封 IP,在数据采集时经常会使用代理。当然,requests 也有相应的 proxies 属性。首先,构建自己的代理 IP 池,将其以字典的形式赋值给 proxies,然后传输给 requests,代码如下:

  1. proxies={
  2. "http":"http://10.10.1.10:3128",
  3. "https":"http://10.10.1.10:1080",
  4. }
  5. response = requests.get(url, proxies=proxies)

附言:

本文仅对 Python 爬虫及实现过程做了简明扼要地介绍,仅能使初学者对 python 爬虫有一个粗浅的认识,并不能让你完全掌握 Python 爬虫。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发