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

# 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. html lesson one

    Review Congratulations on completing the first lesson of HTML & CSS! You are well on your way to ...

  2. 数据结构:Queue

    Queue设计与实现 Queue基本概念 队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(Front):取出数据元素的一端 队尾(Rear):插入数据元素的一端 队列不允许在中间部位进行操 ...

  3. servlet中请求转发(forword)与重定向(sendredirect)

    请求转发和重定向 request.setAttribute("test","hello"); request.getRequestDispacther(&quo ...

  4. MYSQL数据库中,常见的数据类型有哪些?它们与java中的数据类型如何对应

    A.常规 映射 integer 或者 int int 或者 java.lang.Integer INTEGER 4 字节 long long Long BIGINT 8 字节 short short  ...

  5. 21.struts-Action配置.md

    目录 1.Action开发方式 2.通配符 访问地址 [toc] 3.常量 后缀 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freema ...

  6. 浏览器唤起APP的思路(本文转载)

    在做 h5 页面中,会遇到这样一个需求,有一个立即打开的按钮,如果本地安装了我们的 app,那么点击就直接唤起本地 app,如果没有安装,则跳转到下载. 首先想到的是两个问题:一是如何唤起本地 app ...

  7. Canvas中 drawImage绘制图片不显示

    在学习 html5中的 Canvas.drawImage时写了如下代码: <!doctype html> <html> <head><title>研究& ...

  8. RPN(region proposal network)之理解

    在faster-r-cnn 中,因为引入rpn层,使得算法速度变快了不少,其实rpn主要作用预测的是 “相对的平移,缩放尺度”,rpn提取出的proposals通常要和anchor box进行拟合回归 ...

  9. LisView控件

    用LisView控件在窗体中创建一个表,设置一个按钮,点击按钮, 将数据库中的表在这个控件中显示(LisView控件中表格式列名与数据库中一致) 首先使用控件将表的每一列创建好,加入一个按钮,如图,现 ...

  10. SPSS-回归分析

    回归分析(一元线性回归分析.多元线性回归分析.非线性回归分析.曲线估计.时间序列的曲线估计.含虚拟自变量的回归分析以及逻辑回归分析) 回归分析中,一般首先绘制自变量和因变量间的散点图,然后通过数据在散 ...