本文首发:ZKeeer’s Blog——简单爬虫的通用步骤
多图预警,长文预警
不详细的部分,后面会陆续补充
知识点很多,适合小白,大神绕路
欢迎转载
填坑系列一:简单爬虫的通用步骤——多线程/多进程爬虫示例
填坑系列二:待定
.
.
.
1.获取数据
爬虫,就是要千方百计地装成浏览器从网站骗数据。——我说的
1.1从requests.get()说起
最开始一个简单的爬虫就是调用python的requests模块,使用get函数。(为了不祸害别人网站,我以自己的网站为例)
import requests
url_response = requests.get("http://zkeeer.space")
print(url_response.status_code, url_response.text)
这里get函数从给出的URL获取数据,打印出状态码和获取的内容看看。
200 <!DOCTYPE html>
<html lang="zh-CN">
<head>......
状态码200,说明平稳落地。后面是获取到的网页。
这里要说明一点,url_response.text 和 url_response.content的区别:
.text返回的是Unicode类型,.content返回的是bytes型也就是传说的二进制的数据。当需要的数据是文本时,最好用.text,当你需要下载图片时,要用.content
上面是.text返回的值,下面打印出来.content的值让大家看看。
200 b'<!DOCTYPE html>\r\n<html lang="zh-CN">\r\n <head>
看到前面的小b以及后面赤裸裸的\r\n了么?
我的博客挺简单没有那么大访问量,也不需要限制访问量,也不需要严查你的IP,UserAgent,Cookie等。当你需要大量,高频次访问,而且访问的还是淘宝这样的商业网站,这时候你就需要伪装了,不能只是赤裸裸的用个get加个url,就向网站大喊:“我!浏览器!给数据!” 也就我的博客这么好心给你,淘宝早就会“淘宝不想理你,并向你扔了个大创可贴”。
1.2学会使用火狐浏览器开发者工具
如何伪装一个浏览器?
学习当然都是从模仿开始——也是我说的!
这里使用的是火狐浏览器开发者工具,别听这么高大上,其实就是打开火狐浏览器按F12!
第一步输入网址进入我的博客,http://zkeeer.space 然后按F12,找到网络这一栏。它会提示你重新载入,那就按一下F5,刷新一下。
注意以下几栏。然后找到并点开我们需要的,也就是第一个
右侧会出来对应的详细信息。包括:消息头,Cookie,参数,响应,耗时,堆栈跟踪。
首先requests.get(url, params=None, **kwargs),下面的顺序按照参数顺序,一一来。
1.3requests.get()参数一:url
消息头这一栏给出的请求方法是GET,即请求时使用requests.get(),如果这里是POST,对应使用requests.post()。get函数的url,即请求头的Host,这里是“zkeeer.space”
1.4requests.get()参数二:params
get(url, params=None, **kwargs)中params,是构成网址中一些参数,网址链接“?”后面的那些参数。举个栗子:我的一篇文章链接是http://zkeeer.space/?p=383 那么后面p=383就是get 的参数(当然你也可以直接访问http://zkeeer.space/?p=383,而不需要参数)。需要把这里列举的参数都写到params里面,哪怕是该参数没有值。
那么一开头我们那几行代码就应该这么写了。
import requests
tar_url = "http://zkeeer.space" # 目标网页
param = {"p": 383} # 请求头的参数
url_response = requests.get(url=tar_url, params=param)
print(url_response.status_code, url_response.text)
这样获取到的页面就是“zkeeer.space/?p=383”对应的文章了。
1.5requests.get()参数三:headers
可能会有疑问,get(url, params=None, **kwargs)并没有headers这个参数啊。这个包含在**kwargs里面,同样还有另一常用的proxies,待会儿会说到。headers应该写什么呢?下图所示的消息头中的请求头即是这里的headers参数。
跟参数一样,需要把请求头的所有信息写入headers(如果网站不查cookie的话,cookie没必要写)。如果对这些参数不了解,可以点击后面对应的详细了解,介绍的很详细。
上面的几行代码又要进