python 豆瓣图片的爬取
豆瓣图片的抓取:在python中实现生产者和消费者模型的实现,大家可以参考这篇文章 http://www.bkjia.com/Pythonjc/978391.html
个人认为是讲的比较易懂的,只要看看仿写几个例子,感觉这一块就差不多了。下面的代码并没有抓取豆瓣相册的全部,这是找了一个推荐较多的抓取来玩玩,也只抓取前面20页,每页有30张图片,所以可以根据这个去跟新url。维护了一个list来保存图片的url,一个消费者函数来下载图片,一个生产者函数来取图片的url , 下面看代码:
# _*_coding:utf-8_*_ import urllib2
import cookielib
from bs4 import BeautifulSoup
import re
import time
import threading start = start_time = time.ctime()
s = []
max_length = 30
condition = threading.Condition() class Producer(threading.Thread):
def run(self):
for i in xrange(20):
condition.acquire()
if len(s) == max_length:
print 's is full'
condition.wait()
request_url = 'https://site.douban.com/widget/public_album/86320/?start=%s' % (i*30) #推荐相册的url headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
} opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
response = urllib2.Request(request_url, headers=headers)
html = opener.open(response)
soup = BeautifulSoup(html)
img_urls = soup.find_all('a', {'class': 'album_photo'}) for item in img_urls:
p = re.compile(r'src="(.*?)"')
img_url = p.search(str(item.find('img'))).group(1) #图片的url
s.append(img_url)
print 'producer somthing'
condition.notify() class Consumer(threading.Thread):
def run(self):
count = 0
while True:
if condition.acquire():
if not s:
print 's is empty wait'
condition.wait()
img_url = s.pop(0)
print 'consumer something'
with open('E:\\douban\\%s.jpg' %count, 'wb') as fp:
try:
response_img = urllib2.urlopen(img_url).read() #下载图片
fp.write(response_img)
except Exception:
print 'error'
count += 1
condition.notify()
condition.release() t1 = Producer()
c1 = Consumer()
t1.start()
c1.start()
嗯, 差不多就这样,大家还可以多开几个线程,使得下载速度更快点,毕竟如果抓取大量的图片的话,io操作会比较耗时。
这是图片的部分截图:

python 豆瓣图片的爬取的更多相关文章
- Python 爬虫-图片的爬取
2017-07-25 22:49:21 import requests import os url = 'https://wallpapers.wallhaven.cc/wallpapers/full ...
- Python爬虫实例:爬取豆瓣Top250
入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- 豆瓣电影信息爬取(json)
豆瓣电影信息爬取(json) # a = "hello world" # 字符串数据类型# b = {"name":"python"} # ...
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取
很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...
- Python爬虫实例:爬取猫眼电影——破解字体反爬
字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...
- Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
随机推荐
- javascript 数组方法解析
测试数组:testArrayA = ['a','b','c','d','e'] , testArrayB = [2,3,6,1] 1.删除数组最后一项(pop()): 返回删除那一项的值:var po ...
- 算法笔记_014:合并排序(Java)
1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...
- websocket+前后端分离+https的nginx配置
后端服务路径: 172.168.0.2:8080 172.168.0.2:7080 前端目录(html + css + js): /root/apps/mzsg-web 1.修改 /etc/nginx ...
- VS2015 使用
1,使用vs2015时,首先需要安装DAEMON Tools Lite虚拟光驱:
- CountDownLatch使用详解
正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.在Java并发中,countdownlatch的概念是一 ...
- ASP.NET Core: Getting Started with ASP.NET MVC Core
1. ASP.NET Core the Unified Framework ASP.NET Core的统一框架 2. New Solution Project 新的解决方案项目 src folder: ...
- vue 2.0 无法编译ES6语法
# vue2.0 webpack 无法编译 ES6 语法 之前在使用 vue 1.x 时用 vue-loader@8.0.0 版本可以正常打包vue的代码,包括ES6语法也能正常转为ES5语法,但是当 ...
- ORALCE 编译过程卡死解决方法。
--摘自网易博客 术士 在对存储过程进行test的时候,没有完全停止,就又在另外一个窗口,对它进行修改而且进行编译,出现了卡死现象. 用PLSQL Developer 在session里,找到这条se ...
- python第四天
浏览器与Server交互: import socketdef handle_request(client): buf = client.recv(1024) client.send('HTTP/1.1 ...
- ViewPager和View的事件响应规则
案例背景: 当我们实现viewpager的自动切换界面操作的时候,如果需要增加点击图片viewpager停止自动切换,松开手指viewpager自动切换又继续执行的逻辑,正常思维下实现代码如下所示: ...