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 ...
随机推荐
- 【第二周】Java实现英语文章词频统计
1.需求:对于给定的英文文章进行单词频率的统计 2.分析: (1)建立一个如下图所示的数据库表word_frequency用来存放单词和其对应数量 (2)Scanner输入要查询的英文文章存入Stri ...
- PAT 甲级 1129 Recommendation System
https://pintia.cn/problem-sets/994805342720868352/problems/994805348471259136 Recommendation system ...
- centos系统下禁用笔记本触控板
最近把零几年的老爷笔记本拿出来用,使用windows系统实在太卡了,于是折腾安装上Centos系统了,但是在使用的过程中发现鼠标经常失效.使用了多种方法(比如:http://blog.csdn.net ...
- 利用Docker安装Web前端性能测试工具Sitespeed.io
目录结构 一.Sitespeed.io概述 1.Sitespeed.io简介 2.Sitespeed.io使用场景 二.Sitespeed.io的安装和使用 1.安装Sitespeed.io 2.连接 ...
- idea tomcat debug 失效
idea 开发神器 有时候遇到各种问题 这不 现在遇到了一个问题 启动容器时 debug断点不能进入 在网上找了老半天 终于找到答案了 原因是使用tomcat的时候 没有选择"pass en ...
- Redis 备份数据的两种方式
既然是数据库,那就一定有数据备份方式了,而且 Redis 是内存形式的数据库,更需要数据备份了,要不然断电数据就全都丢失了. Redis 数据备份有两种方式: RDB(数据快照) AOF(记录操作日志 ...
- adb命令模拟按键事件KeyCode
例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent 4 //可以解锁屏幕 adb shell input keyevent 82 //在屏幕上做划 ...
- 插件-3D轮播图
先上效果图 查看实例点击 这里 这个栗子中,可以选择展示 5 张 或者展示 3 张,即使是只有一个slide,也可以完成布局,正常轮播,麻麻再也不用怕只有4个slid而不能用这种轮播啦! 本栗实现原 ...
- 【Mybatis】简单的mybatis增删改查模板
简单的mybatis增删改查模板: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...
- Codeforces Round #525 Div. 2 自闭记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...