python3 中 爬虫学习之urllib

说说urllib 忘记urllib2 吧

python 3 中的urllib 和python2 中不一样, Python3 中urllib 是 Python2 中urllib 和urllib2 的合并

Python3 和Python 2 中的urllib 对比

  • 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。
  • 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。
  • 在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。
  • 在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。
  • 在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。
  • 在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。
  • 在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。
  • 在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request。

以下都是介绍Python3 中的urllib

官方文档是学习的最好资料
https://docs.python.org/3/library/urllib.request.html#module-urllib.request

获取 头信息和 访问的内容

import urllib.request
import random

# user-agent 列表 伪装使用
import urllib.request
import random

# user-agent 列表 伪装使用
ua_agent = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
]

# 在user-agent 中随机选择一个
user_agent = random.choice(ua_agent)
header = {'User-Agent': user_agent}
url = "http://www.baidu.com/"
# 构造一个请求
request = urllib.request.Request(url, headers=header)
# request.add_header("User-Agent", user_agent)
print(request.get_header("User-agent"))
response = urllib.request.urlopen(request)
text = response.read().decode("utf8")
print(text)
print("=" * 80)
print(response.getcode())  # 返回状态200
print("=" * 80)
print(response.geturl())  # 
print("=" * 80)
print(response.info())
print("=" * 80)

urllib 包含的包
urllib,request 发送http请求

urllib.error 处理请求过程中的出现的异常
urllib.parse解析url
urllib.robotparser 解析robots.txt 文件

查询文档

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)



class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

这两种方式配合使用比较好, 虽然urlopen 里面可以直接添加url 等参数但是不能添加头信息等。 使用Request 类作为urlopen的参数传递,比较好, 这样也可以动态的添加头信息啦。

 request = urllib.request.Request(url, headers=header)
 request.add_header("User-Agent", user_agent)

response

urllib.request.urlopen() 返回对象 有这样几种方法获得基本的返回信息
- geturl()
- info() 服务器返回的头信息
- getcode() 状态 码
- read() 返回文本数据

当有get 方法传递参数时候需要警醒编码, 字段形式转化为 传递参数需要的形式

wd = {'spam': 1, 'eggs': 2, 'bacon': 0}
wd = urllib.parse.urlencode(wd)
print(wd) # spam=1&eggs=2&bacon=0

使用urllib 爬取百度贴吧中的页面(还没有对页面数据进行处理)

import urllib.request


def loadPage(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
    request = urllib.request.Request(url, headers=headers)
    return urllib.request.urlopen(request).read().decode("UTF-8")


def writePage(html, filename):
    with open(filename, 'w', encoding="utf8") as f:
        f.write(html)


def sprider(url, beginPage, endPage):
    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50
        filename = "第" + str(page) + "页"
        url = url + "&pn=" + str(pn)
        html = loadPage(url)
        writePage(html, filename)
        print("结束")


if __name__ == '__main__':
    kw = "权力的游戏"
    beginPage = 1
    endPage = 10
    url = "http://tieba.baidu.com/f?"
    data = urllib.parse.urlencode({"kw": kw})
    url = url + data
    sprider(url, beginPage, endPage)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值