python小爬虫练手
一个人无聊,写了个小爬虫爬取不可描述图片....
代码太短,就暂时先往这里贴一下做备份吧。
注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的.... :)
#! /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小爬虫练手的更多相关文章
- 简单的node爬虫练手,循环中的异步转同步
简单的node爬虫练手,循环中的异步转同步 转载:https://blog.csdn.net/qq_24504525/article/details/77856989 看到网上一些基于node做的爬虫 ...
- python爬虫练手项目快递单号查询
import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...
- Python入门、练手、视频资源汇总,拿走别客气!
摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...
- python学习笔记-练手实例
1.题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列 代码: for i in range(1,10): print ('\r') for j ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- Python 爬虫练手项目—酒店信息爬取
from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- Python Python Python 100个练手项目
1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版)7.多线程+代理池爬 ...
- Python小爬虫-自动下载三亿文库文档
新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?o ...
随机推荐
- IDEA设置头注释—自定义author和date
IDEA设置头注释,自定义author和date的方法如下所示: 去掉波浪线的方式:鼠标选中单词 --> 点击鼠标右键 --> spelling --> save 'xxx' to ...
- FreeMarker(XML模板)导出word
在项目中使用它完成的功能是按照固定的模板将数据导出到Word.比如台账.在完成后将处理过程按照台账的要求导出,有时程序中需要实现生成标准Word文档,要求能够打印,并且保持页面样式不变. 这个功能就是 ...
- saltstack基础篇
使用saltstack的前提是PPT 服务.流程.工具和技术 安装 rpm -Uvh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel- ...
- Netty系列学习
Netty系列之Netty高性能之道 Netty系列之Netty线程模型 Netty系列之Netty 服务端创建 Netty系列之Netty编解码框架分析 Netty系列之Netty百万级推送服务设计 ...
- 第204天:js---重载和多态
一.根据arguments个数实现重载 js本身不支持重载,所以只能通过其他方式实现,arguments检测传参的个数,然后再执行不同的方式 function add() { var sum = 0 ...
- 【Quartz.Net】.net 下使用Quartz.Net
Quartz.net是作业调度框架 1. 项目中添加quartz.net的引用(这里使用nuget管理) 新建一个类TimingJob,该类主要用于实现任务逻辑 using Quartz; usi ...
- HDU4759_Poker Shuffle
这是一个很好的题目,来自2013长春网赛. 题目的意思是给你2^N张扑克牌,每次洗牌前分别把从下开始数为奇数和偶数的牌分别拿出来放在一堆,两堆可以任意一个放在上面. 现在问你是否存在一种情况使得经过若 ...
- BZOJ3566 SHOI2014概率充电器(动态规划+概率期望)
设f[i]为i在子树内不与充电点连通的概率.则f[i]=(1-pi)·∏(1-qk+qk·f[k]). 然后从父亲更新答案.则f[i]=f[i]·(1-qfa+qfa*f[fa]/(1-qfa+qfa ...
- Now or later UVALive - 3211(2-SAT 最小值最大化)
emmm...去吃早饭了... rujia讲的很好.. 最小值最大化问题,,,二分枚举答案 设x1.x2为同一个集合中的元素,y1.y2为另一个集合中的元素,如果x1与y1之差小于mid,那么如果 ...
- [CF1103B]Game with modulo
题目大意:交互题,有一个数$a(a\leqslant10^9)$,需要猜出它的值,一次询问为你两个数字$x,y(x,y\in[0,2\times10^9])$: 若$x\bmod a\geqslant ...