实现原理及思路请参考我的另外几篇爬虫实践博客

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 +=1 print('正在下载:'+img_url)
geshi = img_url.split('.')[-1] # 因为图片格式不一样,所以切片,把链接中图片后缀获取到,用于下面拼接文件名
img_content = requests.get(img_url).content
with 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) # 获取内页图片的url if __name__ == '__main__': # 判断文件入口
start_time = time.time()
main()
end_time = time.time()
print(start_time)
print(end_time)
print(end_time-start_time)

py3+requests+urllib+bs4+threading,爬取斗图图片的更多相关文章

  1. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  2. 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求

    6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...

  3. python爬取斗图网中的 “最新套图”和“最新表情”

    1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...

  4. Python爬取 斗图表情,让你成为斗图大佬

    话不多说,上结果(只爬了10页内容) 上代码:(可直接运行)   用到Xpath #encoding:utf-8 # __author__ = 'donghao' # __time__ = 2018/ ...

  5. 使用requests+BeaBeautiful Soup爬取妹子图图片

    1. Requests:让 HTTP 服务人类 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定 ...

  6. 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充

    今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...

  7. shell爬取斗图网

    #!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...

  8. 【原创】py3+requests+json+xlwt,爬取拉勾招聘信息

    在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...

  9. py3+requests+json+xlwt,爬取拉勾招聘信息

    在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...

随机推荐

  1. 【php增删改查实例】第二十三节 - PHP文件上传

    22. PHP文件上传 22.1 资源文件 将这三个东西拷贝项目的根目录. 拷贝完毕后,打开upload.html: 现在,我们在项目的根目录去编写一个upload.php. PHP给我们提供了很多关 ...

  2. Bluedroid 函数分析:BTA_GATTC_Open

    进行GATT 通信,首先要打开GATT 的通道.下面我们分析BTA_GATTC_Open 这个函数: 这个函数在bta_gattc_api.c 文件中定义,这个是一个接口文件,里面没有做真正的open ...

  3. 【知识整理】这可能是最好的RxJava 2.x 入门教程(一)

    一.前言 这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(完结版)[强力推荐] 这可能是最好的RxJava 2.x 入门教程(一) 这可能 ...

  4. spring boot 在不同环境下读取不同配置文件的一种方式

    在工程中,通常有根据不同的环境读取不同配置文件的需求,对于spring boot 来说,默认读取的是application.yml 或者 application.properties.为了区分不同的环 ...

  5. checkpoint-BLCR部署和测试(源码)

    1. 概述2. 部署过程2.1 源码下载2.2 解压安装2.3 添加库环境2.4 插入内核模块3. 测试3.1 创建测试程序3.2 功能测试4. 参考博客 1. 概述 checkpoint 2. 部署 ...

  6. Jmeter(三十一)_数据驱动,业务关联

    这种数据驱动的本质是:将测试的case,参数,url,预期结果,存储于本地excel中.运行脚本时,从文件中获取预期结果,将实际结果与预期结果比较,将实际结果,比较结果,响应状态码回写excel. 一 ...

  7. 浏览器跨域请求之credentials

    -时间起源- 前段时间,需要弄个简单的网站出来,访问远程的api服务. 我是这么做的.首先是在搭建一个nodejs服务来运行前端页面.在我请求登录的时候,能成功返回相应的成功信息.然后,当我再次请求读 ...

  8. 第八次Scrum meeting

    第八次Scrum  meeting 任务及完成度: 成员 12.29 12.30 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(99%) 任务1114-1:完成对网页数 ...

  9. Linux内核第七节 20135332武西垚

    预处理.编译.链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行. (截图 ...

  10. Flask-论坛开发-3-数据库

    对Flask感兴趣的,可以看下这个视频教程:http://study.163.com/course/courseLearn.htm?courseId=1004091002 1. SQLAlchemy ...