py3+requests+urllib+bs4+threading,爬取斗图图片
实现原理及思路请参考我的另外几篇爬虫实践博客
py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/uncleyong/p/6892688.html
py3+requests+json+xlwt,爬取拉勾招聘信息:http://www.cnblogs.com/uncleyong/p/6960044.html
py3+urllib+re,轻轻松松爬取双色球最近100期中奖号码:http://www.cnblogs.com/uncleyong/p/6958242.html
实现代码如下:
#-*- coding:utf-8 -*-
import requests, threading, time
from lxml import etree
from bs4 import BeautifulSoup# 获取源码
def get_html(url):# url = 'http://www.doutula.com/article/list/?page=1'headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}request = requests.get(url=url, headers=headers) # 网址发送get请求response = request.content.decode('utf-8') # 获取源码# print(response)return response# 匹配图片url
def get_img_html(html):# soup = BeautifulSoup(html,'html.parser')soup = BeautifulSoup(html,'lxml') # 解析网页all_a = soup.find_all('a',class_='list-group-item') # 获取a标签,如果有class或id来命名,一定要加上名字# class="list-group-item"是a标签的名字# <a class="list-group-item" href="http://www.doutula.com/article/detail/7536783"># print(type(all_a)) # <class 'bs4.element.ResultSet'># print(all_a)for i in all_a:# print(i['href'])img_html = get_html(i['href']) # 获取内页源码,i['href']表示获取属性值# print(img_html)get_img(img_html)# 获取图片url
def get_img(html):# soup = etree.HTML(html) # 初始化源码# items = soup.xpath('//div[@class="artile_des"]') # //表示某个目录下,从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。# # []表示过滤条件# for item in items:# imgurl_list = item.xpath('table/tbody/tr/td/a/img/@onerror')# # print(imgurl_list)# # start_save_img(imgurl_list)soup = BeautifulSoup(html, 'lxml')items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des')# 不能写成这样:find_all后面不能跟find,因为find是找一个,find_all是找多个,从多个中找一个是不对的# items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des').find('img')['src']# print(items)imgurl_list = []for i in items:imgurl = i.find('img')['src'] # img标签下的src属性# print(type(imgurl)) # <class 'str'># print(imgurl)imgurl_list.append(imgurl)start_save_img(imgurl_list) # 这里是对每一组套图做多线程# 下载图片
x = 1
def save_img(img_url):# global x # 全局变量# x +=1# img_url = img_url.split('=')[-1][1:-2].replace('jp','jpg') # 以=分割# print('正在下载'+'http:'+img_url)# img_content = requests.get('http:'+img_url).content# with open('doutu/%s.jpg'%x, 'wb') as f:# urllib下的retrieve也可以下载# f.write(img_content)global x # 全局变量x +=1print('正在下载:'+img_url)geshi = img_url.split('.')[-1] # 因为图片格式不一样,所以切片,把链接中图片后缀获取到,用于下面拼接文件名img_content = requests.get(img_url).contentwith open('doutu/%s.%s'%(x,geshi), 'wb') as f: # urllib下的retrieve也可以下载f.write(img_content)def start_save_img(imgurl_list):for i in imgurl_list:# print(i)th = threading.Thread(target=save_img,args=(i,)) # i后面加逗号表示args是一个元组# target是可调用对象,是一个函数名,线程启动后执行,th.start()th.join()# 主函数
def main():start_url = 'http://www.doutula.com/article/list/?page={}'for i in range(1,2):# print(start_url.format(i))start_html = get_html(start_url.format(i))get_img_html(start_html) # 获取内页图片的urlif __name__ == '__main__': # 判断文件入口start_time = time.time()main()end_time = time.time()print(start_time)print(end_time)print(end_time-start_time)
![](/assets/blank.gif)
py3+requests+urllib+bs4+threading,爬取斗图图片相关推荐
- python简单爬取斗图图片(自学第十天)
一.前期准备 (一).我们要爬取的页面 1,我们要爬取的网站为:https://www.doutula.com/photo/list/?page=1 2,获取请求头,来模拟浏览器浏览,不让网站直接就暴 ...
- 爬虫笔记——多线程爬取斗图网表情包(threading)
爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...
- python3爬虫——多线程爬取斗图网表情包
本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- python爬取斗图
python使用requests模块请求网址,使用lxml模块中etree抓取数据,并使用time模块延时 爬取斗图啦如图所示: 将爬取到每页的数据保存在文件夹中 打开任意一个文件,将图片保存在内: ...
- 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!
最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...
- 使用python爬取斗图网的图片
使用python爬取斗图网的图片 以下是代码部分: # -*- coding: utf-8 -*- """ Created on Wed Apr 14 14:41:42 ...
- 多线程爬取斗图表情包
和朋友在QQ上聊天感觉呀没有激情,突然,突发奇想,我写个小的爬虫 ,把表情包爬取下来随便挑,斗到他们吐血. 下面是爬取斗图的代码,代码可供参考 #encoding:utf8#模块import reim ...
- spider_爬取斗图啦所有表情包(图片保存)
"""爬取斗图吧里面的所有表情包 知识点总结: 一.使用requests库进行爬取,随机请求头(网站反爬措施少.挂个请求头足矣) 二.具体思路: 1.先爬取所有的图片ur ...
最新文章
- android运行过程简书,Android系统的启动流程
- MathType公式行距设置的方法
- 团队-团队编程项目作业名称-需求分析;
- storyboard 如何用代码调用
- 《程序员代码面试指南》第七章 位运算 在其他数都出现k 次的数组中找到只出现一次的数...
- 1.常用字符对象方法
- .Net Framwork概述
- 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
- 学工在线新闻搜索引擎0.1 beta版
- spring的@primary和@qualifier注解解决一个接口多个实现的注入问题
- java21天打卡day20-集合
- android p下载地址,Android P发布,4款国产手机可体验,附下载地址
- 局域网联机游戏找不到服务器,国庆想局域网联机,除了“吃鸡”,这些Steam游戏别错过...
- u盘linux 修复grub,Ubuntu 18.04与Win10双系统U盘安装后的GRUB2修复
- iOS面试题:Socket原理
- discuz模板文件说明
- 支付宝 ACQ.TRADE_NOT_EXIST 解决方案
- 云计算基础-基本概念(一)
- Mac Intellij IDEA 开发必备插件以及插件下载不成功方式:Cannot download
- ip-guard文档加密后无小锁标志