# http://www.doutula.com/article/list/?page=1 第一页
# http://www.doutula.com/article/list/?page=2 翻页
# <a href="http://www.doutula.com/article/detail/1535518" class="list-group-item random_list"> # # 首页中具体包链接
# <img src="http://ww1.sinaimg.cn/large/9150e4e5ly1flj1mvb3hcj20c809cjrm.jpg" alt="猫爪" οnerrοr="this.src='http://img.doutula.com/production/uploads/image/2017/11/15/20171115749279_RPFWHq.jpg'"> #图片链接

# 匹配多行 reg = re.compile(reg,re.S)

#这里是需要的python包
import requests
import time
import gevent
import re
import os
from gevent import monkey

# monkey.patch_all()

# 1.每页的url从1-531,使用for循环 拼接url
# 2.打开url之后,使用正则findall抓取该页的具体包链接 ,存入package_list
def get_pic_url(page):
try:
os.mkdir(str(page))
except Exception as e:
pass
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'}
url = 'http://www.doutula.com/article/list/?page={}'.format(page)
res = requests.get(url,headers = head)
tmp = re.findall(r'<a href="([^#].*?)" class=".*?">',res.text)
print(tmp)
package_list.extend(tmp)
# 3.使用for循环遍历package_list 作为picture_url
# 4.打开改url ,然后抓取url中的表情jpg,存入本地文件夹或者数据库
for pic_url in package_list:
if len(pic_url) != len('http://www.doutula.com/article/detail/1070805'):
break
else:
res_pic = requests.get(pic_url,headers = head)
reg = r'''<img src="(.*?)" alt="(.*?)" .*?>'''
reg = re.compile(reg,re.S)
tmp = re.findall(reg,res_pic.text)

print(tmp)

for i in tmp:
num = tmp.index(i)
picture_res = requests.get(i[0],headers = head)
string = ''
if picture_res:
tmp_str = i[1]
for each in tmp_str:
if each in ('\\','/','*','?','"','|','>','<'):
pass
else:
string = string + each
tmp_str = string
if i[0][-3:] == 'jpg':
with open(r'./{}/{}-{}{}.jpg'.format(page,package_list.index(pic_url),num,tmp_str),'wb') as f:
f.write(picture_res.content)
time.sleep(1)
else:
with open(r'./{}/{}-{}{}.gif'.format(page,package_list.index(pic_url),num,tmp_str),'wb') as f:
f.write(picture_res.content)
time.sleep(1)
else:
break
def f1(): #1-265
for page in range(1,532):
package_list.clear()
get_pic_url(page)
package_list = []
f1()
#
# def f2(): # 266-531
# for page in range(266,531):
# get_pic_url(page)
#
# g1 = gevent.spawn(f1)
# g2 = gevent.spawn(f2)
# g1.join()
# g2.join()

转载于:https://www.cnblogs.com/guducp/p/9026682.html

一个简单的进程池版的爬虫程序相关推荐

  1. Manage,管道的简单应用,进程池,队列的简单应用

    day37---Manage,管道的简单应用,进程池,队列的简单应用 今日内容: 1 生产者消费者模型 主要是为解耦 借助队列来实现生产者消费者模型 栈:先进后出(First In Last Out ...

  2. 一个简单的ip池的搭建

    在爬虫的时候总是会遇到跑的太频繁而导致ip被封号的问题,所以就想着做一个简单的ip池去规避这种反爬取的手段,当然我写的ip池功能稍微简单一点,但是也能满足在爬取时遇到的封禁ip的问题.整个流程就是先用 ...

  3. php和python写爬虫-一个简单的Python写的XML爬虫

    一个简单的Python写的XML爬虫 来源:程序员人生 发布时间:2013-11-06 16:22:29 阅读次数:1578次 原理很简单,读XML结构,返回值,判断,根据返回的值得到下一个XML的地 ...

  4. 分享:一个简单的线程池的实现

    一个简单的线程池的实现 http://my.oschina.net/hejiula/blog/110519

  5. 手写一个简单的线程池MyThreadPool

    说明 手写的一个简单的线程池,旨在帮助了解线程池的工作原理. 核心内容 核心工作线程 任务阻塞队列 定义一个内部类去实现核心工作线程 /*** 内部类:工作的核心线程*/private final c ...

  6. python代理池_用Python搭建一个简单的代理池

    其实每次爬东西的时候,特怕IP被封,所以每次都要把时间延迟设置得长一点...这次用Python搭建一个简单的代理池.获取代理IP,然后验证其有效性.不过结果好像不是很理想,为什么西刺代理的高匿代理都能 ...

  7. java timetasker_Java网络与多线程系列之1:实现一个简单的对象池

    前言 为什么要从对象池开始呢,先从一个网络IO操作的demo说起 比如下面这段代码,显而易见已经在代码中使用了一个固定大小的线程池,所以现在的重点在实现Runnble接口的匿名对象上,这个对象每次创建 ...

  8. 一个简单的线程池设计方案

    一个简单的线程池本质上是生产者-消费者模型,一般是线程池负责消费任务,任务分配线程负责生产任务,任务可以由队列.链表或全局变量等数据结构承担.如果生产和消费速度差不多,可以采用环形队列结构:如果任务有 ...

  9. 实现自己的operator new和operator delete以及实现一个简单的内存池管理类

    为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...

  10. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

最新文章

  1. Android Studio编写运行测试纯java代码可带main()函数
  2. 《信息安全研究》数据安全专刊研讨会召开
  3. 用 Winetricks 配置 WINE
  4. python多线程理解
  5. python 在末尾增加一个字符串,python - Python File.write在末尾添加额外的字符串 - SO中文参考 - www.soinside.com...
  6. 根因分析初探:一种报警聚类算法在业务系统的落地实施 1
  7. Android之jni入门
  8. Android 应用性能优化(4)---Android App性能评测分析-启动时间篇
  9. 循环数组中找查找某个数值
  10. 反转链表——Java递归求解
  11. paypal ipn java_javashop中paypal使用指南
  12. java中怎么审阅图片_java – Crucible REST API:无法添加审阅者
  13. 1273-宣传墙(状压dp )
  14. 【英语:基础高阶_经典外刊阅读】L3.长句子扒皮—如何快速寻找主干
  15. C盘清理及可清理文件详解(Windows 7)-简单易操作_让你的C盘彻底解放
  16. pdf,word,ppt在线预览
  17. 什么是c语言系统调用,什么是系统调用?为什么要用系统调用?
  18. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial
  19. 前嗅教你大数据:采集东方财富网数据
  20. 苹果手机怎么用流量下载大于200M的应用

热门文章

  1. Tomcat配置两个应用服务
  2. python3 open打开文件_Python3基础 file open 打开txt文件并打印出全文
  3. ajax escape用法,ie11下ajax用escape发送中文参数失败
  4. 函数与导数中常用的函数和不等关系
  5. 白话文:几个例子马上看懂typescript基础类型
  6. RocketMQ源码 — 二、 NameServer
  7. Java文件的写入与读出
  8. 实际运用中DataSet、DataTable、DataRow点滴
  9. ******2:***常用工具排行榜-《百晓生兵器谱》
  10. 把C++语言的书读薄