首页 > 其他 > 详细

开始写一个爬虫(1)

时间:2018-12-08 16:43:06      阅读:167      评论:0      收藏:0      [点我收藏+]

因为是作为笔记写的,所以会很啰嗦,而且代码不会全部展示。。

首先,你要确定一个目标,就是你要爬的网站。我选的就不说了,比较邪恶,需要18岁以下的小僵尸绕路。

选好之后,构思下整个脚本的大致结构。

1.通过网站的查询接口出一组比较感兴趣的话题下的一些分组,获取这些分组URL,存储成一个list.

2.循环访问这些分组的URL.

3.爬取每个分组下的图片。

  (1)获取图片的URL,以list存储。

     (2) 下载图片。

  (3)判断下一页是否存在,如果存在,拼接URL,访问下一页。不存在的话,访问下一组图片。

ok,结构很简单。

然后开始选择工具。

我使用的python版本是3.6,IDE是pycharm,库是urllib.request  url.error re socket。

代码中最重要的两个函数urllib.request.Request()和urllib.request.urlopen()

给个敌台链接https://blog.csdn.net/bo_mask/article/details/76067790 讲的蛮好的。我自己研究的之后在写。

urllib.request.urlopen()返回的是网页的 HTTPResposne 类型的对象,使用read()函数读取返回的时候,由于图片的返回方式为byte类型,所以需要decode()转码。

如果转码成‘UTF-8’,可能会出现一个报错‘‘utf-8‘ codec can‘t decode byte 0xcb in position 134: invalid continuation byte’,归根到底是编码的错误。

再网上看到三个解决方式:

  1.脚本开头写 #coding: utf-8  ,我这边没管用。

  2.变一种编码方式,如decode(‘GBK‘)

  3.修改第二个参数errors,decode(encoding,errors),该参数的作用是‘设置不同错误的处理方案’。修改值为‘ignore‘.

    小备注:其他可能得值有 ‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 以及通过 codecs.register_error() 注册的任何值。

再提一个小小的点,请求处一般要写一个抛出错误的处理,网络断开之后,直接退出程序。

如:

try:
file = url_req(url,header)
except err.HTTPError as e:
print(‘network mistake: %s‘, e)
exit()
except Exception as e:
print(e)
exit()

有点小累,休息一会儿。

另外纪念一下今天杭州下大雪。

 

开始写一个爬虫(1)

原文:https://www.cnblogs.com/marseilles/p/10088018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!