欢迎大家来到IT世界,在知识的湖畔探索吧!
代码不是看出来的,而是敲出来的,欢迎关注公众号,收藏教程,跟着步骤练习爬虫,成为真正的Spider Man。
在第一篇教程里(不跳步骤新手python爬虫教程(一))我们学习了安装python、运行python、下载IDE: Pycharm(代码编辑器)以及浏览器的网络请求等相关知识内容。
在第二篇教程里(不跳步骤新手python爬虫教程(二))认识了两种网络协议http、https、对请求行与请求头Request URL、Request Headers、Query String等参数、requests模块的相关方法、获取网页原码的三种方式进行了讲解。最后我们以百度首页和百度翻译两个页面调用requests库进行了抓包。下面紧接着开始爬虫第三篇教程的学习。
步骤一:设置响应超时参数
requests.get(url,headers = headers, timeout = 3)
欢迎大家来到IT世界,在知识的湖畔探索吧!
在某些网络情况不好或者服务器端异常的情况会出现请求慢或者请求异常的情况,这个时候我们需要给请求设置一个超时时间,而不是让程序一直在等待结果。timeout 就是我们所说的超时参数,设置为3,是指3秒如果还链接不到(没有返回响应)的话,就报错。
步骤二:retrying模块
我们首先需要安装retrying模块。打开命令提示符窗口(键盘win键+R键,输入cmd,点击回车),敲入pip install retrying进行下载。
retrying模块是一个第三方模块,我们在此使用这个模块的目的是防止网站请求超时。
假设我们要获取一批url地址,其中某一个地址处于某种原因,链接失败,当我一般碰到链接失败的时候,一般会选择刷新网页,但如果我们发现刷新几次都没有反应,我们就不必在这个地方纠结,直接爬取下一个网页就好了,retrying模块就是起到这个目的。
欢迎大家来到IT世界,在知识的湖畔探索吧!form retrying import retry
@retry(stop_max_attempt_time = 3)
def func1():
print("~~~~~~~~~")
raise ValueError("error!"
“stop_max_attemp_time”参数可以更改。上面函数用retry修饰,函数反复执行三次,如果三次全报错,则报错,如果三次中有一次正常运行,则程序继续走。
下面我们以百度首页为例来利用retrying模块发送网络请求:
import requests
from retrying import retry
headers = {
"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",
"Referer": "https://m.douban.com/tv/american"}
@retry(stop_max_attempt_number=3) #让被装饰的函数反复执行三次,三次全部报错才会报错,中间又一次正常,程序继续往后走
def _parse_url(url):
print("*"*100)
response = requests.get(url,headers=headers,timeout=5)
return response.content.decode()
def parse_url(url):
try:
html_str = _parse_url(url)
except:
html_str = None
return html_str
if __name__ == '__main__':
url = "http://www.baidu.com"
url1 = "www.baidu.com"
print(parse_url(url1))
步骤三:携带cookie的请求
我们进入到人人网的首页,输入用户名、密码进行登录,进入个人主页界面。而服务器请求当前页面之所以能请求成功是因为携带了相关的cookie信息。
直接携带cookie请求url地址:
- 直接把cookie放在requests的方法的headers参数里(抓包获取cookie)
- cookie字典:获取cookie字典,然后放在cookie参数里
发送post请求获取cookie
- session = requests.session()#session的方法和requests一样
- session.post(url, data, headers)#服务器设置的cookie会保存在session中
- session.get(url)#会带上之前保存在session中的cookie
欢迎大家来到IT世界,在知识的湖畔探索吧!# coding=utf-8import requestsurl = "http://www.renren.com/327550029/profile"headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1", }cookie="anonymid=jcysvok0-5ad7y0; depovince=GW; jebecookies=7c8f517c-cd19-43e2-a3aa-167372392e98|||||; _r01_=1; JSESSIONID=abcCwQQelI5Mxd1cx48ew; ick_login=d616d74d-6f98-420c-af4d-f9e855b11e0d; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; p=d0cd0b910f5be6e2328b8ce0fc7ab0569; first_login_flag=1; ln_uact=mr_mao_hacker@163.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn421/20171230/1635/main_JQzq_ae7b0000a8791986.jpg; t=69282122a1706bf87220ce140d1d44579; societyguester=69282122a1706bf87220ce140d1d44579; id=327550029; xnsid=c31e4689; loginfrom=syshome; ch_id=10016"cookie_dict = {i.split("=")[0]:i.split("=")[-1] for i in cookie.split("; ")}print(cookie_dict)response = requests.get(url,headers=headers,cookies=cookie_dict)with open("renren2.html","w",encoding="utf-8") as f: f.write(response.content.decode())
关注公众号【秃头程序员】,不错过不跳步骤的新手python爬虫教程(四)
(原创文章文字图片禁止转载,禁止用于商业用途,转载公众号请后台留言申请。图文部分来自网络,若有侵权,请联系删除)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22170.html