【Python3~爬虫工具】使用urllib库

urllib是python自带的一个库,其实也是分版本的,所以使用的时候注意版本。本文用的例子是Python3,python3内置的是Urllib2和Urllib两个库的组合。

Urllib分为四个模块,但是常用的是三个模块

  • request:基本的请求模块,也就是发出请求的。
  • error:错误模块,比如请求超时模块,404等,#URLError和HTTPError,HTTPError是URLError的子类,专门处理Http异常消息的,比如404,500等信息。
  • parse:解析模块,解析请求成功偶返回的结果进行解析。
  • robotparser:这个模块不常用,这里不做解释。
#!/usr/local/env python
#  coding:utf-8

import urllib.request
import urllib.parse
import urllib.error

#下面开始介绍urllib的使用,环境语言是python3,使用下面的网址作为参考
#http://www.sse.com.cn/market/bonddata/data/tb/

#设置属性
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
referer = 'http://www.sse.com.cn/market/bonddata/data/ltb/'
#设置headers
headers = {'User-Agent': user_agent, 'Referer': referer}
#请求参数
request_param = {'jsonCallBack': 'jsonpCallback6588',
            'isPagination': 'true',
            'sqlId': 'COMMON_BOND_XXPL_ZQXX_L',
            'BONDTYPE': '地×××府债券',
            'pageHelp.pageSize': '25',
            'pageHelp.pageNo': '2',
            'pageHelp.beginPage': '2',
            'pageHelp.cacheSize': '1',
            'pageHelp.endPage': '21'}
request_param_encode = urllib.parse.urlencode(request_param).encode(encoding='UTF8')

# 需要请求的URL地址
request_url = 'http://query.sse.com.cn/commonQuery.do?'

# 使用Request来设置Headers
request = urllib.request.Request(request_url, request_param_encode, headers)

#设置代理服务器
proxy = urllib.request.ProxyHandler({'http':'113.214.13.1:8000'})
#挂载和安装一下
opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)

#具体细节开始使用
try:
    #这个是没有超时时间的,如果想要超时时间,可进行设置
    response = urllib.request.urlopen(request)
    data = response.read()
    print(data.decode('utf-8'))
# 异常处理模块,urllib有一个模块是error模块,是处理这块问题的
#URLError和HTTPError,HTTPError是URLError的子类,专门处理Http异常消息的,比如404,500等信息
except urllib.error.URLError as e:
    if hasattr(e, 'code'):
        print('HttpError')
        print(e.code)
    elif hasattr(e, 'reason'):
        print("URLError")
        print(e.reason)

正常这个网址,http://www.sse.com.cn/market/bonddata/data/tb/
这个网址是债券市场,正常url是直接可访问的。其实爬虫就是反复尝试,对了,就爬了。先介绍以下遇到的几种常见情况,后期会专门写一篇文章弄爬虫常见的遇到问题以及解决方式。
1、需要请求头,爬虫的时候设置请求头。
2、需要cookie,请求的时候设置cookie。
3、上一个动作来源哪里,有些接口数据可以指定来源哪个页面,如果是直接页面输入url,平台会直接返回错误,认为不是在客户正常操作。
这个网站基本就碰到了1和3这两种情况。

转载于:https://blog.51cto.com/shangdc/2090763

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值