1 定义
爬虫(网络数据采集)是指自动抓取互联网信息的脚本或者程序,换句话说,是指按照程序员的想法,由程序员自定义规则编写程序批量的爬取数据(图片、音频、视频、数据等)。
2 爬虫流程
- 解析HTML页面。
- 根据前端的语法或者正则表达式提取数据。
- 保存数据。
3 爬虫常使用的请求库
爬虫常使用的请求库有requests、urllib、selenium等。
- urllib:一系列用于操作URL的功能。
- requests:基于urllib编写的,阻塞式HTTP请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
- selenium:自动化测试工具。一个调用浏览器的driver,通过这个库可以直接调用浏览器完成某些操作,比如输入验证码。
4 常见状态码status_code
状态码是用来判断服务器和网页的状态的。
-
200
表示程序和服务器正常通信。 -
301
HTTP 301 永久重定向说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。 -
302
HTTP 302 Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新 (In SEO-speak, it is said that the link-juice is not sent to the new URL)。 -
304
客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified。 -
307
即请求的资源临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
307错误 -
401
状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
-
403
状态码 403 Forbidden 代表客户端错误,指的是服务器端有能力处理该请求,但是拒绝授权访问。
-
404
状态码 404 Not Found 代表客户端错误,指的是服务器端无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。网页丢失。
-
410
被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。这样的状况应当被认为是永久性的。
410错误 -
418
这就是个玩笑。IETF在1998年愚人节时发布的一个笑话RFC。超文本咖啡壶控制协议。
htcpcp1.0协议中的418的意义是:当客户端给一个茶壶发送泡咖啡的请求时,茶壶就返回一个418错误状态码,表示“我是一个茶壶”。 -
451
因法律原因不可用,当用户请求访问某个经政府审核等查核方法后认定不合法的来源时,就会显示这个错误代码。
451错误 -
500
服务器内部错误Internal Server Error,服务器崩溃。
-
502
代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
-
503
服务不可用,临时服务器维护或过载,服务器无法处理请求。
-
504
网关超时。
一个请求小荔枝:
import requests
URL='https://www.bilibili.com'
# 向b站发送请求,获取b站服务器的响应结果
response=requests.get(url=URL)
#输出状态码
print(response.status_code)
#response.encoding='gbk',页面是什么编码方式就改成什么。
#text: 页面源代码(字符串类型)
print(response.text, type(response.text))
# content:页面源代码(二进制形式(字节))
# print(response.content)
如果网页发生乱码,只需要根据页面指定编码方式解码即可。
requests默认使用ISO-8859-1的编码(ASCII), 其也能够使用页面服务器所指定的编码方式。
如果页面中没有charset='编码'怎么办:response.encoding=None