怎样抓取网页数据(什么是爬虫?网络爬虫(..)爬虫的基本流程 )
优采云 发布时间: 2022-04-18 01:06怎样抓取网页数据(什么是爬虫?网络爬虫(..)爬虫的基本流程
)
什么是爬行动物?
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常被称为网络追逐者)是根据一定规则自动从万维网上爬取信息的程序或脚本。其他不太常用的名称是 ant、autoindex、emulator 或 worm。
其实通俗的说,就是通过程序在网页上获取你想要的数据,也就是自动抓取数据。
您可以抓取女孩的照片并抓取您想观看的视频。. 等待你要爬取的数据,只要你能通过浏览器访问的数据就可以通过爬虫获取
爬行动物的性质
模拟浏览器打开网页,获取网页中我们想要的部分数据
在浏览器中打开网页的过程:
当你在浏览器中输入地址时,通过DNS服务器找到服务器主机,向服务器发送请求,服务器解析并将结果发送给用户的浏览器,包括html、js、css等文件内容,浏览器解析它并最终呈现它给用户在浏览器上看到的结果
因此,用户看到的浏览器的结果都是由 HTML 代码组成的。我们的爬虫就是获取这些内容。通过分析和过滤HTML代码,我们可以得到我们想要的资源(文字、图片、视频...)
爬虫的基本流程
发出请求
通过HTTP库向目标站点发起请求,即发送Request,请求中可以收录额外的headers等信息,等待服务器响应
获取响应内容
如果服务器能正常响应,就会得到一个Response。Response的内容就是要获取的页面的内容。类型可以是 HTML、Json 字符串、二进制数据(图片或视频)等。
解析内容
获取的内容可以是HTML,可以用正则表达式和页面解析库解析,也可以是Json,可以直接转成Json对象解析,也可以是二进制数据,可以保存或进一步处理
保存数据
以多种形式保存,可以保存为文本,也可以保存到数据库,或者以特定格式保存文件
请求,响应
浏览器向 URL 所在的服务器发送消息。这个过程称为 HTTP 请求
服务器收到浏览器发送的消息后,可以根据浏览器发送的消息内容进行相应的处理,然后将消息发送回浏览器。这个过程是 HTTP 响应
浏览器收到服务器的Response信息后,会对信息进行相应的处理,然后显示
请求中收录什么?
请求方法
主要有:常用的GET/POST两种,还有HEAD/PUT/DELETE/OPTIONS
GET 和 POST 的区别在于请求的数据 GET 在 url 中,而 POST 存储在 header 中
GET:向指定资源发出“显示”请求。使用 GET 方法应该只用于读取数据,而不应该用于产生“副作用”的操作,例如在 Web 应用程序中。原因之一是 GET 可能被网络蜘蛛等任意访问。
POST:向指定资源提交数据,并请求服务器处理(如提交表单或上传文件)。数据收录在请求文本中。此请求可能会创建新资源或修改现有资源,或两者兼而有之。
HEAD:和GET方法一样,是对服务器的指定资源的请求。只是服务器不会返回资源的文本部分。它的优点是使用这种方法可以获取“有关资源的信息”(元信息或元数据),而无需传输整个内容。
PUT:将其最新内容上传到指定的资源位置。
OPTIONS:此方法使服务器能够返回资源支持的所有 HTTP 请求方法。使用 '*' 代替资源名称,并向 Web 服务器发送 OPTIONS 请求,以测试服务器功能是否正常工作。
DELETE:请求服务器删除Request-URI标识的资源。
请求网址
URL,即Uniform Resource Locator,也就是我们所说的网站,Uniform Resource Locator是对可以从互联网上获取的资源的位置和访问方式的简明表示,是互联网上标准资源的地址. Internet 上的每个文件都有一个唯一的 URL,其中收录指示文件位置以及浏览器应该如何处理它的信息。
URL的格式由三部分组成:
第一部分是协议(或服务模式)。
第二部分是存储资源的主机的 IP 地址(有时是端口号)。
第三部分是宿主资源的具体地址,如目录、文件名等。
爬虫在爬取数据时,必须有目标URL才能获取数据。因此,它是爬虫获取数据的基本依据。
请求头
收录请求过程中的头部信息,如User-Agent、Host、Cookies等信息。下图显示了请求百度时所有的请求头信息参数。
请求正文
请求是携带的数据,比如提交表单数据时的表单数据(POST)
响应中收录的内容
所有 HTTP 响应的第一行是状态行,后跟当前 HTTP 版本号、3 位状态代码和描述状态的短语,以空格分隔。
响应状态
响应状态有多种,如:200表示成功,301跳转,404页面未找到,502服务器错误
响应头
如内容类型、类型长度、服务器信息、设置cookies,如下图
响应体
最重要的部分,包括请求资源的内容,比如网页HTML、图片、二进制数据等。
可以抓取什么样的数据
网页文本:如HTML文档、Json格式文本等。
图片:将得到的二进制文件保存为图片格式
视频:也是二进制
其他:只要你要求,你就能得到
如何直接解析数据流程 Json解析正则表达式流程 BeautifulSoup解析流程 PyQuery解析流程 XPath解析流程 关于爬取的页面数据与浏览器看到的区别
出现这种情况是因为网站中的很多数据都是通过js和ajax动态加载的,所以直接通过get请求得到的页面和浏览器显示的不一样。
如何解决js渲染的问题?
分析ajax
硒/网络驱动程序
溅
PyV8,幽灵.py
如何保存数据
文本:纯文本、Json、Xml等。
关系型数据库:mysql、oracle、sql server等结构化数据库。
非关系型数据库:MongoDB、Redis等键值存储
什么是请求
Requests 是基于 urllib 用 python 编写,使用 Apache2 Licensed 开源协议的 HTTP 库
如果你看过之前的文章文章关于urllib库的使用,你会发现urllib其实很不方便,而且Requests比urllib方便,可以为我们省去很多工作。(使用requests之后,你基本就舍不得用urllib了。)总之,requests是python实现的最简单最简单的HTTP库。建议爬虫使用 requests 库。
默认安装python后,requests模块没有安装,需要通过pip单独安装
pip install requests
requests函数整体功能演示
import requests
response = requests.get("https://www.baidu.com")
print(type(response))
print(response.status_code)#状态码
print(type(response.text))
print(response.text)#打印网页内容
print(response.cookies)
print(response.content)
print(response.content.decode("utf-8"))#改变编码
我们可以看到响应式使用起来确实非常方便。有一个问题需要注意:
很多情况下网站直接使用response.text会造成乱码,所以这里使用response.content
这样返回的数据格式其实是二进制格式,然后通过decode()转换成utf-8,解决了直接通过response.text返回显示乱码的问题。
发出请求后,Requests 会根据 HTTP 标头对响应的编码进行有根据的猜测。当您访问 response.text 时,Requests 使用其推断的文本编码。您可以找出请求使用的编码,并可以使用 response.encoding 属性更改它。例如:
response =requests.get("http://www.baidu.com")
response.encoding="utf-8"
print(response.text)
无论是通过response.content.decode("utf-8)还是通过response.encoding="utf-8"都可以避免乱码问题
各种请求方法
requests中提供了各种请求方法
Requests 库的 get() 方法
实践:
网页爬取常用代码框架
跑
import requests
r = requests.get("https://www.baidu.com")
r.status_code#获取网站状态码
r.text#获取内容
r.encoding#获取编码
r.apparent_encoding#获取另一个编码
r.encoding='utf-8'#替换编码为'UTF-8'
你会发现一个乱码和一个正常,因为
代码:
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()#如果状态码不是200,就引发HTTPError异常
r.encoding=r.apparent_encoding #替换编码
return r.text #返回网页内容
except:
return "产生异常啦!"
url="www.baidu.com/"
print(getHTMLText(url))