练习之代码片段,以做备忘:

# encoding=utf8

from __future__ import unicode_literals
import urllib, urllib2
import re
import os
import threading def get_html(url):
try:
url = url.encode('utf-8')
page = urllib2.urlopen(url)
return page.read()
except Exception as ex:
print 'get url_%s html error, ex=%s' % (url, ex) def get_images(url):
url = url.encode('utf-8')
html = get_html(url)
pattern = r'<img.+class="BDE_Image".+src="([^"]+\.jpg)"'
img_list = re.findall(pattern, html)
pattern = r'<img.+src="([^"]+\.jpg)".+class="BDE_Image"'
img_list.extend(re.findall(pattern, html))
# 去重
img_list = sorted(set(img_list), key=img_list.index)
return img_list # 指定主题页面之总页面数
def get_page_count(url):
html = get_html(url)
pattern = r'"total_page":(\d+)'
m = re.search(pattern, html)
return m.group(1) if m else 0 # 获取每页主题url列表
def get_page_urls(html):
pattern = r'<a href="/p/(\d+)"'
url_list = re.findall(pattern, html)
if url_list:
url_list = map(lambda x: 'https://tieba.baidu.com/p/%s' % x, url_list)
return url_list # 下载指定页面之图片
def download_page_images(page_url):
html = get_html(page_url)
title = re.search(r'(?<=<title>)(.*)(?=</title>)', html).group(1)
print title
page_no = re.search(r'(\d+)', page_url).group(0)
page_count = int(get_page_count(page_url))
print 'page: %s, page_count: %d' % (page_no, page_count) for page_idx in range(1, page_count + 1):
url = page_url + '?pn=%d' % page_idx
img_list = get_images(url)
if img_list:
print 'page index: %d, image_count: %d' % (page_idx, len(img_list))
if not os.path.exists('images'):
os.mkdir('images') img_folder = 'images\%s' % page_no
if not os.path.exists(img_folder):
os.mkdir(img_folder)
idx = 0
for img_url in img_list:
img_filename = img_folder + '\%d_%d.jpg' % (page_idx, idx)
if not os.path.exists(img_filename):
urllib.urlretrieve(img_url, img_filename)
idx += 1 def main():
# 扒取最大页数
max_pagecount = 30
base_url = r'https://tieba.baidu.com/f?kw=图片&ie=utf-8?pn=%s' # 分页而扒
for idx in range(1, max_pagecount):
url = base_url % ((idx - 1) * 50)
html = get_html(url)
url_list = get_page_urls(html)
for page_url in url_list:
try:
download_page_images(page_url)
threading._sleep(2)
except:
continue if __name__ == '__main__':
main()

Python: 爬取百度贴吧图片的更多相关文章

  1. Python爬取百度贴吧图片

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

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

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

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

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

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

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

  5. 使用python爬取百度贴吧内的图片

    1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...

  6. Python——爬取百度百科关键词1000个相关网页

    Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...

  7. python 爬取百度url

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-29 18:38:23 # @Author : EnderZhou (z ...

  8. python爬取百度贴吧帖子

    最近偶尔学下爬虫,放上第二个demo吧 #-*- coding: utf-8 -*- import urllib import urllib2 import re #处理页面标签类 class Too ...

  9. 爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

随机推荐

  1. JEECG新版UI规划,主要提供H5方案(采用主流技术)

    JEECG 结合当前主流的UI技术,在新版3.7.4 即将推出新的UI方案,主要采用Bootstrap,Vue技术.同时提供代码生成器模板(单表.一对多),快速生成你喜好的模板代码. 版本一: Boo ...

  2. jsfl 生成flash 工具面板

    利用flash组件的List做界面,先从flash中拖出List组件,然后删除.绑定Main类. package { import flash.display.Sprite; import flash ...

  3. Bash:精华

    # 声明索引数组(以从0开始的整数做索引的数组).以下三种等效. declare -a array declare array=(this is numeric array ) array=(this ...

  4. css给文字加下划线

    语法:linear-gradient(direction, color-stop 1, color-stop 2,……) 简单用法:background-image: linear-gradient( ...

  5. String特殊值的判断方式

    对String的特殊值的判断上,除了要关注是否为null,还要关注是否是空字符串. 经常处理的时候直接判断是否为Null就好了,这样很容易出现问题: if(null!=str) { //not goo ...

  6. How to Pronounce the Months of the Year

    How to Pronounce the Months of the Year Share Tweet Share Tagged With: Most Popular Some of the mont ...

  7. 趣味编程:静夜思(Python版)

    from itertools import groupby def verticalWriting(txt, offset): l = lambda x: x[0] % offset for (_, ...

  8. [C语言]逆序的三位数

    ---------------------------------------------------------------------------------------- //  main.c ...

  9. [原创]HTML 用div模拟select下拉框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML xmlns=" ...

  10. QuickSand图片点击后分裂成几份消失效果《IT蓝豹》

    QuickSand图片点击后分裂成几份消失效果 QuickSand图片点击后分裂成几份消失效果,适合做图片退出和剪切效果.同时也可以学习android动画. demo中都封装好几个功能类,主要动画实现 ...