新手如何用requests写一个爬虫的简单文字教程,大佬们勿喷,如有不对欢迎指正!
本帖最后由 qianaonan 于 2023-7-4 18:44 编辑一、序言
1、在这个教程里会用到requests库和Fiddler Classic软件,至于怎么安装和使用请自行百度。
2、在这个教程里有什么不对的地方欢迎指正{:1_918:},这个教程只是写一下我如何使用requests这个库的记录,毕竟萝卜青菜各有所爱而且我也不是专门学习编程的,只是一个热爱编程的自学者,每个人的理解都不一样,只要最后的结果它是一致的就行。
3、在教程开始之前,请先理解一下什么是get请求和post请求,我不会用什么官方的语言描述,当然我也没看没百度{:1_907:}用我自己的理解就是用户端post是发送数据、get是得到数据。
二、创建会话对象
首先导入库import requests
我习惯用req作为对象
req = requests.Session()
这里等号前req可自行更改,只要自己知道就行。
三、发送GET请求
使用Session对象发送GET请求非常简单,只需调用get()方法,并传入目标URL:
response = req.get('https://api.example.com/get')
上面代码可以携带的参数:
1、url:请求的目标URL。(常用)
2、params:添加到URL的查询字符串中的参数,以字典形式提供。(常用)
3、headers:请求的头信息,以字典形式提供。(常用)
4、cookies:发送的Cookie,以字典或CookieJar对象形式提供。(常用)
5、auth:用于身份验证的元组,例如(username, password)。
6、timeout:请求超时时间,以秒为单位。
7、proxies:用于请求的代{过}{滤}理,可以是字典形式提供。
8、verify:是否验证服务器的SSL证书,默认为True。
9、stream:是否立即下载响应内容,默认为False。
10、allow_redirects:是否允许重定向,默认为True。
我们可以通过打印函数print得到get请求后的html源码
print(response.text)
实例:
代码就不给大家了,可以看到下面已经输出网页源代码,注:req.get('url',headers={'123':'234'})除了url链接是链接加双引号,其他的都是参数等于中括号里面双引号加英文冒号加双引号例如:你从fiddler上复制到的header粘贴出来是这个样子的:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
可以看到上面是中间有个冒号,那么前面统一用引号,冒号后面也一样,这里说到的方法也同样适用于下面的post请求,但是部分webfrom里面的数据需要格式化,比如json形式或者list形式都得格式化一下。
四、发送POST请求
要发送POST请求,可以使用post()方法。可以通过data参数传递请求的数据:
payload = {'key1': 'value1', 'key2': 'value2'}
response = req.post('https://api.example.com/post', data=payload)
上面括号中代码可以携带的参数:
1、url:请求的目标URL。(常用)
2、data:向服务器发送的数据,可以是字典、字符串或字节流。(常用)
3、json:向服务器发送的JSON数据,会自动设置Content-Type为application/json。(常用)
4、headers:请求的头信息,以字典形式提供。(常用)
5、params:添加到URL的查询字符串中的参数,以字典形式提供。(常用)
6、cookies:发送的Cookie,以字典或CookieJar对象形式提供。(一般在header中使用)
7、files:上传的文件,可以是字典或元组形式提供。
8、auth:用于身份验证的元组,例如(username, password)。
9、timeout:请求超时时间,以秒为单位。
10、proxies:用于请求的代{过}{滤}理,可以是字典形式提供。
11、verify:是否验证服务器的SSL证书,默认为True。
12、stream:是否立即下载响应内容,默认为False。
13、allow_redirects:是否允许重定向,默认为True。
同样也可以通过print函数打印出源码。
五、添加请求头
举个例子
headers = {'User-Agent': 'Mozilla/5.0'}
response =req.get('https://api.example.com', headers=headers)
六、cookie
在这里我们使用的是session,这个会自动存储会话的cookie,当然有可能cookie不一定是一致,有些防爬虫的网站会经常进行cookie更换,例如:我遇到的就是我们公司的官网,但是通过fiddler classic把cookie用搜索,它的cookie是存在于源码或者返回头里,这里在源码里进行数据清洗,如果在返回头里的可以试试这个
cookies = response.headers.getlist('Set-Cookie')
输出返回头提取cookie。
以上就是requests.session的简要教程。
接下来讲讲如何利用Fiddler Classic。
安装就不具体讲了,自行百度吧,写requests可以仿照fiddler classic上所抓取的网址顺序,以及各个网址中所需的参数和请求形式,可以参照:https://blog.csdn.net/weixin_42724501/article/details/120280822学习如何看懂和使用fiddler classic,如果fiddler选择all processes可以运行脚本查看到自己写的python脚本在哪一步有问题。
如果要过纯数字验证码,可以使用ddddocr,得到数据后就需要数据清洗,常用的lxml、BeautifulSoup、re正则(简单但有可能数据不是自己想要而且网址数据可能是经常变的)、list转str进行str查找等,这里就不一一写了,百度一下能学会的。
最后的最后,我觉得对于新手学爬虫第一步踏出去会很难,但你踏出去了,慢慢学会了就会好很多。
有什么问题百度或问吾爱大佬们,本人不提供帮助,这个文章就当给新手踏出第一步助力一把,当然我不知道对新手会不会有帮助,但是我就是这样没有老师自己一步一步来的。
大佬们勿喷,欢迎大佬指正!
刚学requests爬虫的也可以看看评论区(如果有),向大佬多多学习,慢慢的就会了。
这个文章当自己的一个学习python过程中简单的记录吧!
论友分享了一些实例,我置顶了,大家可以打开看看,初学者尝试自己写一个很快就会上手,我写第一个超级简单的爬虫打印出源码仅仅学了一天,当然我是从selenium库转来学requests的,不要觉着看的很难,其实你看懂了就会觉得还行。 https://mp.weixin.qq.com/s/5ecaEOHN0rjlrHcaNVSXUQ uuwatch 发表于 2023-7-4 10:13
写的很详细了,我感觉requests的请求应该不止get跟post,还有其他的方式,请求头不整个代{过}{滤}理的吗?
简单点吧,对于我这种自学者,先踏出get和post,学会这些大部分网址就能爬了。 能请教下是从哪学的吗,就是看书还是看视频学的 非常简洁的介绍,感谢分享{:1_921:} 你学多久了? 感谢分享,共同进步 node吗? 新手前来学习~ 学习 学习谢谢分享