一个人无聊,写了个小爬虫爬取不可描述图片....

代码太短,就暂时先往这里贴一下做备份吧。

注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的....   :)

#! /usr/bin/python

import chardet
import urllib3
import uuid
import os
import logging
import time
import sys
import re
import threading
from bs4 import BeautifulSoup """
http://www.qiubaichengren.com/1.html
""" class PageNotFoundException(BaseException):
"""
代表网页404的异常
"""
pass class ResponseStatusException(BaseException):
pass class QiuBaiChengRenSpider: http_pool_manager = urllib3.PoolManager() img_save_dir = 'D:/QiuBaiChengRen/' logger = logging.getLogger('QiuBaiChengRenSpider') def __init__(self):
self.init_log() def init_log(self):
stream_handler = logging.StreamHandler(sys.stdout)
self.logger.addHandler(stream_handler)
self.logger.setLevel(logging.DEBUG) def get(self, url):
try:
http_response = self.http_pool_manager.request('GET', url)
if http_response.status == 404:
raise PageNotFoundException('404')
if http_response.status != 200:
raise ResponseStatusException(http_response.status)
return http_response.data
except Exception:
self.logger.info(u'获取网页的时候发生了异常')
return '' def extract_img(self, html_doc):
bs = BeautifulSoup(html_doc, 'lxml')
imgs = bs.select('div.mala-text img')
return imgs def save_img(self, img_tag):
img_link = img_tag['src'].strip()
save_name = self.img_save_dir + img_tag['alt'] + '___' + uuid.uuid4().hex + os.path.splitext(img_link)[1]
save_name = re.compile('[\\s+,\",\']').sub('', save_name) # 覆盖掉生成的文件名中不合法的部分 self.logger.info('Save img: %s %s' %(save_name, img_link)) img_byte = self.get(img_link)
if img_byte == '':
return img_file = open(save_name, 'wb')
img_file.write(img_byte)
img_file.close() def list_visitor(self, seed):
threads = []
i = 1
while True:
try:
url = seed % {'page': i}
self.logger.info('Begin process:%s' %url) html_doc = self.get(url)
if html_doc == '':
continue imgs = self.extract_img(html_doc)
for img in imgs:
# self.logger.info('Saving img:%s %s' %(img['alt'], img['src']))
t1 = threading.Thread(target=self.save_img, args={img})
t1.start()
threads.append(t1)
i += 1
except PageNotFoundException:
self.logger.info('404')
break
except BaseException:
break
for t1 in threads:
t1.join() if __name__ == '__main__':
spider = QiuBaiChengRenSpider()
spider.list_visitor('http://www.qiubaichengren.com/%(page)d.html')

python小爬虫练手的更多相关文章

  1. 简单的node爬虫练手,循环中的异步转同步

    简单的node爬虫练手,循环中的异步转同步 转载:https://blog.csdn.net/qq_24504525/article/details/77856989 看到网上一些基于node做的爬虫 ...

  2. python爬虫练手项目快递单号查询

    import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...

  3. Python入门、练手、视频资源汇总,拿走别客气!

    摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...

  4. python学习笔记-练手实例

    1.题目:输出 9*9 乘法口诀表.     程序分析:分行与列考虑,共9行9列,i控制行,j控制列     代码: for i in range(1,10): print ('\r') for j ...

  5. 【现学现卖】python小爬虫

    1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...

  6. Python 爬虫练手项目—酒店信息爬取

    from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...

  7. Python 小爬虫流程总结

    接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...

  8. Python Python Python 100个练手项目

    1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版)7.多线程+代理池爬 ...

  9. Python小爬虫-自动下载三亿文库文档

    新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?o ...

随机推荐

  1. 在MFC中显示cmd命令行

    添加函数 void InitConsoleWindow1() { ; FILE* fp; AllocConsole(); nCrt = _open_osfhandle((long)GetStdHand ...

  2. Java ISO 8601时间格式转换

    common-lang包: String pattern = "YYYY-MM-dd'T'HH:mm:ssZZ"; System.out.println(DateFormatUti ...

  3. 第187天:js基础---常见的Bom对象

    BOM(Browser Object Mode)浏览器对象模型,是Javascript的重要组成部分.它提供了一系列对象用于与浏览器窗口进行交互,这些对象通常统称为BOM. 一张图了解一下先 1.wi ...

  4. 第104天:web字体图标使用方法

    字体图标经常使用的是 阿里图标库的:http://www.iconfont.cn/ icomoon图标库的:https://icomoon.io/ 一.阿里库字体图标使用 第一步: 首先进入阿里巴巴矢 ...

  5. Streaming Big Data: Storm, Spark and Samza--转载

    原文地址:http://www.javacodegeeks.com/2015/02/streaming-big-data-storm-spark-samza.html There are a numb ...

  6. Qt消息机制和事件

    Qt消息机制和事件 1 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应 ...

  7. apue3.e (基于maxos 10.9)

    在Google搜到你的问题,我也碰到同样的问题(5分钟前),然后通过其他的搜索结果找到答案,不知道你是否跟我一样,出现以下的错误: ... clang: error: unknown argument ...

  8. SNMP-网络管理协议

    SNMP协议简介: a. 轮询(Polling) -- 定时获取状态, 中断(Interrupt)--出问题通知 b. 共同体名(community) -- 口令--只读口令 --读写口令 使用SNM ...

  9. javascript中的位运算,

    罗浮宫群里又有讨论位运算符号|了,做过一段时间php,数据库保存布尔值数据经常用到,比如100110 就表明了六个属性的是与否,极大减少了数据量..] ECMAScript 中位运算跟其他语言一样的. ...

  10. 【loj2033】生成魔咒

    Portal --> loj2033 Solution 这题..虽然说好像也是sam的裸题不过既然在智力康复那就强制后缀数组吧qwq ​ (晚点再用sam写一次qwq) 首先如果是要求本质不同的 ...