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

# 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. android除去标题栏或全屏

    想要除去标题栏只要加上下面两句代码在Activity的onCreate方法中即可(要在setContentView之前添加). requestWindowFeature(Window.FEATURE_ ...

  2. ueditor富文本框图片显示

    修改config.json /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /*"physicsPath":"E:/Software/apache-tomc ...

  3. Leetcode 题解 Trapping Rain Water

    题目链接:https://leetcode.com/problems/trapping-rain-water/description/ 思路: 1.先找到最左侧第一个高度不为0的柱子i. 2.从i+1 ...

  4. Servlet基本_サーブレットのライフサイクル、スレッドセーフ

    1.サーブレットのライフサイクル初期化時 ⇒ init() [初回リクエスト時] ↓リクエスト時 ⇒service() ⇒doGet() [Httpリクエストメソッドにより振り分け] 或は⇒doPos ...

  5. Zeosdbo-Query使用

    with DataModule1.Zlxz_zy_Query do        begin          Close;          SQL.Clear;          SQL.Add( ...

  6. Lazarus的DBGrid中回车键的处理

    Lazarus的DBGrid中回车键默认行为是向下移动一个记录,如果想对这一事件做处理,请不要在onkeypress里处理,而在onkeydown事件里处理.

  7. Redis学习笔记一(Redis的详细安装及Linux环境变量配置和启动)

     Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 我使用的是下面这个版本: 若没有资源的话,我在 ...

  8. linux 3.10 一次softlock排查

    x86架构.一个同事分析的crash,我在他基础上再次协助分析,也没有获得进展,只是记录一下分析过程.记录是指备忘,万一有人解决过,也好给我们点帮助. 有一次软锁,大多数cpu被锁,log中第一个认为 ...

  9. 正则表达式(TypeScript, JavaScript)

    课题 使用正则表达式匹配字符串 使用正则表达式 "\d{3}-(\d{4})-\d{2}" 匹配字符串 "123-4567-89" 返回匹配结果:'" ...

  10. 在CentOS7中利用yum命令安装mysql

    在CentOS7中利用yum命令安装mysql 原创 2016年08月31日 10:42:33 标签: mysql / centos 4832 一.说明 我们是在VMware虚拟机上安装的mysql, ...