python爬虫01:urllib初体验

原创 2016年08月29日 19:20:00

选择爬取网站为 http://www.qiushibaike.com/

翻页之后我们可以看到网址变化为http://www.qiushibaike.com/8hr/page/2/?s=4908225

也就是说,其page的变化决定了我们要爬取第几页糗百

因此url为

url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
page可以自己定,固定的数字,乃至for循环爬取多页,此次初体验先爬取第一页

page = 1
url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
爬虫采用urllib,urllib2库来帮助获取回应的网页

于是,代码初步就出来了

import urllib
import urllib2
page = 1
url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
request = urllib2.Request(url)
response = urllib2.urlopen(request)
print response.read()
但是 发现出现Traceback (most recent call last)错误,此错误常见有网页拒绝非人工(比如爬虫)访问、空间不够等。此处是因为网站检测到非法访问,拒绝了。

所以设置headers

user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
headers = { 'User-Agent' : user_agent }
此处需要了解的是:

                                request(url,data,headers),data,heardes的默认参数以及什么时候需要使用

                                获取headers,user-agent,乃至cookies,proxy的方法(网页F12)

user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url,headers=headers)
因此代码变成了如下模样

import urllib
import urllib2
page = 1
url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
print url
user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)
result=response.read()
print result

运行成功

但是与原网页的源代码对比,发现 中文字符出现乱码(LINUX下正常显示

是因为Python的编码问题,初步想法是通过正确的解码方式解决乱码问题,通过F12看到是utf-8编码,因此

response.read().decode("utf-8")

import urllib
import urllib2
page = 1
url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
print url
user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)
result=response.read().decode("utf-8")
print result

但是出现UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 42377: illegal multibyte sequence

感觉很奇怪,页面本身是UTF-8的,然后想要UTF-8解码,结果却提示GBK错误,之后走了一些弯路,暂且不表。

通过查找资料,得知对于此Unicode的字符,需要print出来的话,由于本地系统是Win7中的cmd,默认codepage是CP936,即GBK的编码,所以需要先将上述的Unicode的titleUni先编码为GBK,然后再在cmd中显示出来,然后由于titleUni中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误的。

得到解决方案

import urllib
import urllib2
page = 1
url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4908218' %page
print url
user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)
result=response.read().decode("utf-8").encode("GB18030")
print result
目前为止得到的request跟F12获得的页面内容相同。(LINUX下此方法反而乱码,多此一举










版权声明:Talk is cheap,show me the code

pyhon爬虫学习日记1_urllib-mac系统

系统:Mac sierra 版本:10.12.6  必备知识:最好具备python的基础知识,我已经有这个基础了,所以不知道没有会不会有很大影响 python基础我个人是在http://www.run...
  • yokan_de_s
  • yokan_de_s
  • 2017年09月12日 12:15
  • 231

urllib库的简单使用 && 一个简单的Python爬虫示例

urllib库的简单使用 && 一个简单的Python爬虫示例本篇文章,介绍urllib.request库的简单使用以及注意的问题。最后实现一个Python爬虫的示例。本文是基于Python3.6.2...
  • qq_33689414
  • qq_33689414
  • 2017年11月08日 15:24
  • 310

python2.7爬虫学习笔记(一)---Urllib库的使用

扒一个网页 构造Request post和get数据传送 设置headers Proxy(代理)的设置 Timeout设置 URLError异常处理 cookie的使用...
  • SirM2z
  • SirM2z
  • 2015年06月03日 20:14
  • 7364

Python 3.6 实现简单的爬虫

Python最简单的爬取网页实现
  • github_38196368
  • github_38196368
  • 2017年04月05日 20:31
  • 8566

python爬虫模块安装

urllib和urllib2 python2.x里urllib2库,在python3.x里,urllib2改名为urllib,被分成一些子模块:urllib.request, urllib.pars...
  • qiqiaiairen
  • qiqiaiairen
  • 2016年05月24日 19:45
  • 2073

Python爬虫----爬虫入门(4)---urllib2 模拟登陆

开发环境,ubuntu 14.0.1自带python 2.7.6接下来要开始抓取需要登陆才能抓取的页面: 这里先抓一个不需要验证的网站:学校的官网: 找到登陆框,输入密码账号,登陆。(先打开开发者...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年04月22日 13:12
  • 4666

Python 网络爬虫系列(二) --- 伪装成浏览器访问

hha Python 网络爬虫伪装成浏览器访问   普通的爬一个网页只需要3部就能搞定 url = r'http://blog.csdn.net/jinzhichaoshuiping/article...
  • jinzhichaoshuiping
  • jinzhichaoshuiping
  • 2015年02月13日 17:49
  • 2796

Python爬虫(urllib2+bs4)+分析找出谁是水贴王(1)--数据收集

要分析谁是水贴王,首先要收集发帖和发帖者的数据。 这里测试百度贴吧的李毅吧的前100页:#coding:utf-8 import urllib2 from bs4 import BeautifulS...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年07月13日 20:17
  • 899

python2和python3中urllib的用版本区别及用法 爬虫基础

首先在python2中urllib和urllib2的区别: 1.urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以通过...
  • t8116189520
  • t8116189520
  • 2017年12月21日 10:04
  • 218

Python3.6 爬虫初体验--urllib、beautifulsoup(一)

经常查询IP地址相关,有时目标太多需要批量操作,于是想到python爬虫,批量查询、模式输出,废话不多说,代码奉上! p.s. 涉及到的两个主要模块–urllib、BeautifulSoup p....
  • weixin_37737353
  • weixin_37737353
  • 2017年08月07日 15:35
  • 1886
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python爬虫01:urllib初体验
举报原因:
原因补充:

(最多只允许输入30个字)