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

# 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. fb发布打包外部资源

    将资源放在src文件夹下面即可 然后在打包那就会看到资源,勾上即可

  2. 工作记录 rfcn网络结构 caffe time测速和实际运行中速度不相等。

    现象: 用caffe time测试网络结构,前向传播是 8 ms左右, 实际集成后运行的时候,forward耗时大概4-5ms. 输入大小是一致的. 于是开始查这个问题. 最后定位到,差别在propo ...

  3. iOS 申请distribution证书, 公钥,私钥

    私钥只有在本机生成CSR文件的时候会产生,公钥会在CSR文件传给apple时,apple产生.

  4. dubbo 搭建以及使用笔记

    公司使用dubbo做为rpc框架,有必要简单学习一番(自己搭建),自己做下学习记录. dubbo认识: dubbo是分布式SOA(面向服务)架构的rpc服务治理框架.可兼容各种rpc,强势的地方主要还 ...

  5. LeetCode OJ 215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  6. tomcat 简单安装配置说明

    1.下载安装文件[apache-tomcat-6.0.41.tar.gz]到指定目录[/usr/local]2.解压文件[tar -zxvf apache-tomcat-6.0.41.tar.gz], ...

  7. FBackup:个人用途与商业用途都是免费的

    當自己在備份電腦資料時,若沒有使用備份及還原軟體時,我想很多人的作法就是「想到應該要備份了,然後進行備份檔案的壓縮.壓縮好之後複製到不同的磁碟機或燒錄光碟」,等要用的時候,再拿出來還原.若是這樣,其實 ...

  8. 使用tf.print()打印tensor内容

    使用tf.Print()打印tensor内容,这是tensorflow中调试bug的一个手段,例子如下所示: import tensorflow as tf a = tf.Variable(tf.ra ...

  9. js循环对象,(多层数组)

    javaScript遍历对象.数组总结   在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天抽空把经常用到的方法小结一下,方便今后参考使用!     javaSc ...

  10. el-js中循环遍历el的集合

    遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...