python发起网络请求模块【requests、selenium、urllib、urllib3】

‘Referer’: ‘https://movie.douban.com/typerank?’,

}

#携带cookies

cookies = {‘Cookie’:’ bid=vcLghJHKdzE; __utmz=30149280.1608554450.1.1.utmcsr=(direct)|utmccn='}

#携带请求参数

params = {

‘type’:‘11’,

‘interval_id’:‘100:90’,

‘action’:‘unwatched+playable’,

‘start’:str(i*20),

‘limit’:‘20’,

}

#设置代理池 ip

proxy = {

‘http’:‘101.236.155.89:8899’,

‘https’:‘101.236.155.89:7799’

}

url = ‘https://movie.douban.com/j/chart/top_list?’

res=requests.get(url,headers=headers,params=params,cookies=cookies,proxies=proxy)

print(response.status_code) #输出请求状态码

print(response.content.decode(‘utf-8’)) #输出请求结果

2、selenium


selenium模块可以用于自动化打开浏览器相当于用户主动操作,不用去刻意添加请求头、cookies等,可以大大增加爬虫的成功率

安装

selenium属于第三方库,需要pip安装

pip install selenium

使用

在使用该模块之前,需要配置和浏览器版本对应的浏览器驱动,谷歌浏览器下载驱动地址如下

https://npm.taobao.org/mirrors/chromedriver/

其他浏览器驱动请百度一下

驱动下载完毕后需要添加到环境变量,也可直接将驱动放到python的安装环境下面,建议放到python安装环境中

浏览器驱动

代码测试

from selenium import webdriver

import time

url = ‘http://localhost:5000/’

设置静默模式,谷歌浏览器设置成后台运行,不会自动打开浏览器

#options = webdriver.ChromeOptions()

#options.add_argument(‘headless’)

#driver = webdriver.Chrome(chrome_options=options)

自动打开浏览器

driver = webdriver.Chrome()

driver.get(url)

time.sleep(2) # 暂停两秒,等待浏览器缓冲

print(driver.page_source) #输出访问地址的整个页面代码

driver.quit() # 关闭浏览器

selenium模块自动化脚本测试模块,功能非常强大,相当于人为操作浏览器,这里只是抛砖引玉。需要详细了解的可以直接在CSDN或者百度中搜索进行学习

3、urllib


原文来自:https://www.cnblogs.com/pywjh/p/9689734.html

别人写的太好太明白,自己主要起个 c v 的作用,以免画蛇添足,建议大家可以直接去看原文。

urllib作为Python的标准库,基本上涵盖了基础的网络请求功能。

urllib.request

urllib中,request这个模块主要负责构造和发起网络请求,并在其中加入Headers、Proxy等。

发起GET请求

主要使用urlopen()方法来发起请求:

from urllib import request

resp = request.urlopen(‘http://www.baidu.com’)

print(resp.read().decode(‘utf-8’)) #使用对象的read()方法获得bytes数据。然后进行decode转码

发起POST请求

urlopen()默认的访问方式是GET,当在urlopen()方法中传入data参数时,则会发起POST请求。

注意:传递的data数据需要为bytes格式。

设置timeout参数还可以设置超时时间,如果请求时间超出,那么就会抛出异常。

from urllib import request

​#加上data参数发起POST请求并设置超时时间

resp = request.urlopen(‘http://httpbin.org’, data=b’word=hello’, timeout=10)

print(resp.read().decode()) #同样需要转码

添加Headers

通过urllib发起的请求会有默认的一个Headers:“User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。

所以遇到一些验证User-Agent的网站时,我们需要自定义Headers,而这需要借助于urllib.request中的Request对象。

from urllib import request

url = ‘http://httpbin.org/get’

headers = {‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36’}

需要使用url和headers生成一个Request对象,然后将其传入urlopen方法中

req = request.Request(url, headers=headers)

resp = request.urlopen(req)

print(resp.read().decode())

Request对象

如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能,Request对象如下所示。

class urllib.request.Request(url, data=None, headers={},

origin_req_host=None,

unverifiable=False, method=None)

构造Request对象必须传入url参数,data数据和headers都是可选的。

最后,Request方法可以使用method参数来自由选择请求的方法,如PUT,DELETE等等,默认为GET。

添加Cookie

为了在请求时能带上Cookie信息,我们需要重新构造一个opener。

使用request.build_opener方法来进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。

from http import cookiejar

from urllib import request

url = ‘http://httpbin.org/cookies’

创建一个cookiejar对象

cookie = cookiejar.CookieJar()

使用HTTPCookieProcessor创建cookie处理器

cookies = request.HTTPCookieProcessor(cookie)

并以它为参数创建Opener对象

opener = request.build_opener(cookies)

使用这个opener来发起请求

resp = opener.open(url)

print(resp.read().decode())

或者也可以把这个生成的opener使用install_opener方法来设置为全局的。

则之后使用urlopen方法发起请求时,都会带上这个cookie。

将这个opener设置为全局的opener

request.install_opener(opener)

resp = request.urlopen(url)

设置Proxy代理

使用爬虫来爬取数据的时候,常常需要使用代理来隐藏我们的真实IP。

from urllib import request

url = ‘http://httpbin.org/ip’

proxy = {‘http’:‘50.233.137.33:80’,‘https’:‘50.233.137.33:80’}

创建代理处理器

proxies = request.ProxyHandler(proxy)

创建opener对象

opener = request.build_opener(proxies)

resp = opener.open(url)

print(resp.read().decode())

下载数据到本地

在我们进行网络请求时常常需要保存图片或音频等数据到本地,一种方法是使用python的文件操作,将read()获取的数据保存到文件中。

而urllib提供了一个urlretrieve()方法,可以简单的直接将请求获取的数据保存成文件。(对于做前端开发的来说和需要爬虫的人来说是个绝好的东西)

urlretrieve()方法传入两个参数,第一个是url字符串,第二个是文件保存的地址以及文件名

from urllib import request

url = ‘http://python.org/’

request.urlretrieve(url, ‘python.html’)

urllib.response

在使用urlopen()方法或者opener的open()方法发起请求后,获得的结果是一个response对象。

这个对象有一些方法和属性,可以让我们对请求返回的结果进行一些处理。

read()

获取响应返回的数据,只能使用一次。

getcode()

获取服务器返回的状态码。

getheaders()

获取返回响应的响应报头。

geturl()

获取访问的url。

res = request.urlopen(‘https://cd.meituan.com/’)

getData = res.getcode()

print(getData) #200

print(res.getheaders()) #客户端请求头

print(res.geturl()) # https://www.meituan.com/error/403

#美团的反爬直接返回了403

urllib.parse

urllib.parse是urllib中用来解析各种数据格式的模块。

urllib.parse.quote

在url中,是只能使用ASCII中包含的字符的,也就是说,ASCII不包含的特殊字符,以及中文等字符都是不可以在url中使用的。而我们有时候又有将中文字符加入到url中的需求,例如百度的搜索地址:

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值