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

# 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. centos服务器如何用命令查看哪个程序内存占用情况,硬盘空间占用

    1.free -m只能查看内存总量情况 2.top M ( 注意M是大写) 3.ps aux|head -1; ps aux | sort -k4nr | head -10 ------------- ...

  2. DJango之视图函数

    一)Django WEB框架 2) request.path和request.get_full_path() 是请求的路径 3)render:页面渲染 4)redirect:页面跳转 3)模板语法: ...

  3. ThinkPHP子类继承Controller类的注意事项

    在实际的开发中,往往有很多子类都继承自同一个父类,然后该父类再继承自框架内置类的需求. 比如: class Init extends Controller{...} class son1 extend ...

  4. 【371】Twitter 分类相关

    Bag-of-words model:就是将句子打散成单词的集合. N-gram model:同上,只是按照 n 进行顺序组合. 参考:机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器 留言板侮辱 ...

  5. [C语言]使用函数

    ------------------------------------------------------------------------------------------ //函数原型声明: ...

  6. DAX2012 R3安装

    安装程序跟DAX2009大同小异,不过这验证需要的组件也太多了,简直是.NET Framework大阅兵啊,各种版本都需要安装,特别是VC++从2008一直装到2012,有点崩溃... DEMO数据的 ...

  7. git 先建立本地分支,再传给线上库

    cd 进入本地一个文件夹 git  clone 文件下来 进入右下角 develop分支(remote braches) 新建分支 (check out)   a 把新分支 a 传上线上 新建一个对立 ...

  8. php urldecode 与rawdecode

    php urldecode 解码给出的已编码字符串中的任何 %##. 加号('+')被解码成一个空格字符 php rawurldecode 返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都 ...

  9. Building Projects with Native Code

    [Building Projects with Native Code] 1.安装Node(v4.0以上).Python2.JDK(v8.0以上). 添加 JAVA_HOME环境变量,指向 JDK 的 ...

  10. sed常见用法总结

    编辑文本 sed -i '1i xyz' test.txt 在第一行之前 sed -i '1a xyz' test.txt 在第一行之后插入 sed -i '1c xyz' test.txt 把第一行 ...