练手代码,聊作备忘:

# encoding: utf-8
# from __future__ import unicode_literals import urllib
import urllib2
import re
import os
import time
from threading import Thread class BhsbSpider(object):
_url = r'https://bh.sb/post/category/main/';
_page_count = 0
_page_index = 0 def __init__(self, url, page_count = 0):
self._url = url
self._page_count = page_count
folder = '博海拾贝'.decode('utf-8')
if not os.path.exists(folder):
os.mkdir(folder) def spider(self):
while self._page_index < self._page_count:
self._page_index += 1
self._url = r'https://bh.sb/post/category/main/page/%d' % self._page_index
self.do_spider(self._url) def do_spider(self, url):
html = self.get_html(url)
pattern = r'(?s)<h2><a\s+href="(?P<url>[^"]+).*?>\[博海拾贝\d+\](?P<title>[^<]+).*?'
for i, m in enumerate(re.findall(pattern, html)):
info = '%d. url: %s, title: %s' % ((self._page_index - 1) * 20 + i + 1, m[0], m[1])
print info
# 多线程爬取页面
Thread(target=self.download, args=(m[0], m[1])).start()
time.sleep(2) def download(self, url, title):
title = '博海拾贝\\' + title
title = title.decode('utf-8')
if not os.path.exists(title):
os.mkdir(title)
html = self.get_html(url)
pattern = r'(?s)<p>(?P<title>[^<]+).*?<p><img\s+src="(?P<image>[^"]+)"'
for i, m in enumerate(re.findall(pattern, html)):
img_title = m[0]
img_url = m[1]
img_filename = '%s/%s%s' % (title.encode('utf-8'), img_title, os.path.splitext(img_url)[1])
img_filename = img_filename.decode('utf-8')
print 'download %s ...' % img_filename
if not os.path.exists(img_filename):
Thread(target=urllib.urlretrieve, args=(img_url, img_filename)).start()
time.sleep(1) def get_html(self, url):
try:
url = url.encode('utf-8')
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.9.5.1000 Chrome/39.0.2146.0 Safari/537.36')
page = urllib2.urlopen(req)
return page.read()
except Exception as ex:
print 'get url_%s html error, ex=%s' % (url, ex) if __name__ == '__main__':
url = r'https://bh.sb/post/category/main/'
bs = BhsbSpider(url, 10)
bs.spider()

未及细测试,其间有图片丢失情况。结果如下图示:

python: 爬取[博海拾贝]图片脚本的更多相关文章

  1. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  2. Python 爬取陈都灵百度图片

    Python 爬取陈都灵百度图片 标签(空格分隔): 随笔 今天意外发现了自己以前写的一篇爬虫脚本,爬取的是我的女神陈都灵,尝试运行了一下发现居然还能用.故把脚本贴出来分享一下. import req ...

  3. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

  4. python爬取某个网站的图片并保存到本地

    python爬取某个网站的图片并保存到本地 #coding:utf- import urllib import re import sys reload(sys) sys.setdefaultenco ...

  5. Python爬取 | 唯美女生图片

    这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...

  6. python爬取网页文本、图片

    从网页爬取文本信息: eg:从http://computer.swu.edu.cn/s/computer/kxyj2xsky/中爬取讲座信息(讲座时间和讲座名称) 注:如果要爬取的内容是多页的话,网址 ...

  7. Python爬取mn52网站美女图片以及图片防盗链的解决方法

    防盗链原理 http标准协议中有专门的字段记录referer 一来可以追溯上一个入站地址是什么 二来对于资源文件,可以跟踪到包含显示他的网页地址是什么 因此所有防盗链方法都是基于这个Referer字段 ...

  8. python爬取并批量下载图片

    import requests from lxml import etree url='http://desk.zol.com.cn/meinv/' add1='.html' urls=[] i = ...

  9. Python爬取百度贴吧图片

    一.获取URL Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据.首先,我们定义了一个getHtml()函数: urllib.urlopen()方 ...

随机推荐

  1. substr函数学习

    今天写了单词接龙这道恶心题,在想有没有函数能直接去返回string类型一个区间的字符串,没想到还真有,那就是sudstr 坑点 感觉这个函数有点逗比-- 别的都是str在前,这个偏要在后-- 也许是我 ...

  2. python数据类型、if判断语句

    python的数据类型: int(整型) float(浮点型) #相较c++,去除了char.long.longlong... str(字符串)    #同等c++ sting类型 list(列表) ...

  3. python大法好——ython GUI编程(Tkinter)

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

  4. swoole结合支持thinkphp 5.0版本

    安装swoole pecl install swoole 修改PHP配置文件php.ini加入 extension=swoole.so 有可能不需要人工去加,安装时自动加入进来了, 查看swoole扩 ...

  5. css note

    1.text-align规定了其子元素的对齐方式,当设置在子元素无效时,尝试设置在父元素,子元素可以水平居中: 2.vertical-align使用的前提,首先元素必须是display:inline ...

  6. Jenkins问题笔记

    1.启动docker容器权限不足 通过如下命令启动docker容器后,使用命令"docker logs -f jenkins"查看jenkins容器日志, docker run - ...

  7. BitmapData.threshold()方法

    import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import fl ...

  8. 解决PLSQL Developer 插入中文 乱码问题

    https://blog.csdn.net/guowd/article/details/50989109 PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编 ...

  9. AlphaGo的前世今生(一)Deep Q Network and Game Search Tree:Road to AI Revolution

    这一个专题将会是有关AlphaGo的前世今生以及其带来的AI革命,总共分成三节.本人水平有限,如有错误还望指正.如需转载,须征得本人同意. Road to AI Revolution(通往AI革命之路 ...

  10. 转码器ffmpeg安装

    网络上很多帖子 但是基本上都是没有验证过复制粘贴的 以下是我自己装时流程和网络上的差不多但是中间不通的地方已经改正 centos7 1. 安装autoconf cd /App/srcwget http ...