欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

urllib 网页爬虫

程序员文章站 2022-01-28 21:52:59
...

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())

 

相关标签: 爬虫