urllib 网页爬虫

urllib库

urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据

1、urlopen函数:

from urllib import request
resp=request.urlopen('http://www.baidu.com')
text=resp.read()#读取网页代码
text=resp.readline()#读取单行数据
text=resp.readlines()#读取多行数据
text=resp.getcode()#获取状态码
print(text)

2、urlretrieve函数

request.urlretrieve('http://www.baidu.com','baidu.html')
#下载需要爬取的网页到本地,并保存为baidu.html格式,也可保存为其他格式,比如图片保存为.jpg格式

3、urlencode函数:urlencode可以把字典数据转换为URL编码的数据(当要请求的网址含有中文时,将中文编码然后在请求网页,否则会出错。)

from urllib import parse
params={'name':'张三','age':18,'greet':'hello world'}
rest=parse.urlencode(params)
print(rest)

4、parse_qs函数:将经过编码后的url参数进行解码

from urllib import parse
qs = "name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=100"
print(parse.parse_qs(qs))

5、urlparse和urlsplit函数:对这个url中的各个组成部分进行分割(唯一不一样的地方是,urlparse里面多了一个params属性,而urlsplit没有这个params属性)

from urllib import parse
url='http//www.baidu.com/s?wd=python&username=abc#1'
result=parse.urlparse(url)
print(result)

6、urllib 请求拉钩网页数据

from urllib import request
from urllib import parse
url='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
         'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
         'Cookie':'user_trace_token=20180512130512-a917fede-460a-481a-9b1a-f390d2e2e5a5; _ga=GA1.2.1479989032.1526101488; LGUID=20180512130514-0e5d9234-55a2-11e8-821f-5254005c3644; LG_LOGIN_USER_ID=f3ab1f1a72e03cd8c1c964963e148971a08e96fc2b572b81; index_location_city=%E5%85%A8%E5%9B%BD; JSESSIONID=ABAAABAAAGFABEF78DBB70DA2A4AA5CA9184E699181E250; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1540042668,1540103118,1540306511,1540475511; LGSID=20181025215206-28aa332a-d85d-11e8-a4cd-525400f775ce; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1540475968; LGRID=20181025215943-39829161-d85e-11e8-a50e-525400f775ce; TG-TRACK-CODE=index_search; SEARCH_ID=d7d0d743d8564cb1ba48dbc93b3d234b'}
data={'first':'true',
      'pn':1,
      'kd':'python'}
req=request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST')
resp=request.urlopen(req)
print(resp.read().decode('utf-8'))

7、ProxyHandler处理器(代理设置)

a、代理的原理:在请求目的服务器之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后,在转发给我们的代码。

b、http://httpbin.org:这个网站可以方便的查看http请求的一些参数。

c、在代码中使用代理:

   *使用‘urllib.request.ProxyHandler',传入一个代理,这个代理是一个字典,字典key依赖于代理服务器能够接受的类型,一般是’http‘或者‘https’,值是‘ip:port’

   *使用上一步创建的handler,以及request.build_opener创建一个opener对象

   *使用上一步创建的opener,调用open函数,发起请求。

from urllib import request
url='http://http://httpbin.org/ip'
#使用ProxyHandler,传入代理构建一个handler
handler=request.ProxyHandler({"http":"121.232.148.254:9000"})
#用时上面创建的handler构建一个opener
opener=request.build_opener(handler)
resp=opener.open(url)
print(resp.read())

8、cookie

   格式:

参数意义:

  • NAME:cookie的名字。
  • VALUE:cookie的值。
  • Expires:cookie的过期时间。
  • Path:cookie作用的路径。
  • Domain:cookie作用的域名。
Set-Cookie: NAME=VALUE;Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

9、http.cookiejar模块:

该模块主要的类有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。这四个类的作用分别如下:

a、CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。

b、FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。

c、MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

d、LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例

 

10、保存cookie到本地:save()

from urllib import request
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar("cookie.txt")
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
req = request.Request('http://httpbin.org/cookies',headers=headers)

resp = opener.open(req)
print(resp.read())
cookiejar.save(ignore_discard=True,ignore_expires=True)

11、从本地加载cookie(load())

from urllib import request
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar("cookie.txt")
cookiejar.load(ignore_expires=True,ignore_discard=True)
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
req = request.Request('http://httpbin.org/cookies',headers=headers)

resp = opener.open(req)
print(resp.read())

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值