python从入门到入土图片_Python爬虫入门【7】: 蜂鸟网图片爬取之二
蜂鸟网图片--简介
今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度。
安装模块常规套路
pip install aiohttp
接下来就可以开始写代码了。
我们要爬取的页面,这一次选取的是
http://bbs.fengniao.com/forum/forum_101_1_lastpost.html
打开页面,我们很容易就获取到了页码
好久没有这么方便的看到页码了。
尝试用 aiohttp 访问这个页面吧,模块的引入,没有什么特殊的,采用 import 即可
如果我们需要 使用Asyncio + Aiohttp异步IO 编写爬虫,那么需要注意,你需要异步的方法前面加上async
接下来,先尝试去获取一下上面那个地址的网页源码。
代码中,先声明一个fetch_img_url的函数,同时携带一个参数,这个参数也可以直接写死。
with 上下文不在提示,自行搜索相关资料即可 (`・ω・´)
aiohttp.ClientSession() as session: 创建一个session对象,然后用该session对象去打开网页。session可以进行多项操作,比如post, get, put等
代码中 await response.text() 等待网页数据返回
asyncio.get_event_loop创建线程,run_until_complete方法负责安排执行 tasks中的任务。tasks可以为单独的函数,也可以是列表。
import aiohttp
import asyncio
async def fetch_img_url(num):
url = f'http://bbs.fengniao.com/forum/forum_101_{num}_lastpost.html' # 字符串拼接
# 或者直接写成 url = 'http://bbs.fengniao.com/forum/forum_101_1_lastpost.html'
print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400',
}
async with aiohttp.ClientSession() as session:
# 获取轮播图地址
async with session.get(url,headers=headers) as response:
try:
html = await response.text() # 获取到网页源码
print(html)
except Exception as e:
print("基本错误")
print(e)
# 这部分你可以直接临摹
loop = asyncio.get_event_loop()
tasks = asyncio.ensure_future(fetch_img_url(1))
results = loop.run_until_complete(tasks)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
上面代码最后一部分也可以写成
loop = asyncio.get_event_loop()
tasks = [fetch_img_url(1)]
results = loop.run_until_complete(asyncio.wait(tasks))
好了,如果你已经成果的获取到了源码,那么距离最终的目的就差那么一丢丢了。
修改代码为批量获取10页。
只需要修改tasks即可,在此运行,看到如下结果
tasks = [fetch_img_url(num) for num in range(1, 10)]
下面的一系列操作和上一篇博客非常类似,找规律。
随便打开一个页面
http://bbs.fengniao.com/forum/forum_101_4_lastpost.html
点击一张图片,进入内页,在点击内页的一张图片,进入到一个轮播页面
再次点击进入图片播放页面
最后我们在图片播放页面,找到源码中发现了所有的图片链接,那么问题出来了,如何从上面的第一个链接,转变成轮播图的链接???
下面的源码是在 http://bbs.fengniao.com/forum/pic/slide_101_10408464_89383854.html 右键查看源码。
继续分析吧~~~~ ヾ(=・ω・=)o
http://bbs.fengniao.com/forum/forum_101_4_lastpost.html
转变成下面的链接?
http://bbs.fengniao.com/forum/pic/slide_101_10408464_89383854.html
继续看第一个链接,我们使用F12开发者工具,去抓取一个图片看看。
图片中标×××框的位置,发现了我们想要的数字,那么好了,我们只需要通过正则表达式把他们匹配出来就好了。
代码在下面####的位置,需要注意的是,我采用的原始的正则匹配,在编写正则表达式的过程中,我发现一步竟然没有完整匹配,只能分成两个步骤了,你可以看一下具体的细节o(╥﹏╥)o
查找所有的图片<div class="picList">
获取我们想要的两部分数字
async def fetch_img_url(num):
url = f'http://bbs.fengniao.com/forum/forum_101_{num}_lastpost.html'
print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400',
}
async with aiohttp.ClientSession() as session:
# 获取轮播图地址
async with session.get(url,headers=headers) as response:
try:
###############################################
url_format = "http://bbs.fengniao.com/forum/pic/slide_101_{0}_{1}.html"
html = await response.text() # 获取到网页源码
pattern = re.compile('
')
first_match = pattern.findall(html)
href_pattern = re.compile('href="/forum/(\d+?)_p(\d+?)\.html')
urls = [url_format.format(href_pattern.search(url).group(1), href_pattern.search(url).group(2)) for url in first_match]
##############################################
except Exception as e:
print("基本错误")
print(e)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
代码完成,我们已经获取到,我们想要的URL了,下面继续读取URL内部信息,然后匹配我们想要的图片链接
async def fetch_img_url(num):
# 去抄上面的代码
async with aiohttp.ClientSession() as session:
# 获取轮播图地址
async with session.get(url,headers=headers) as response:
try:
#去抄上面的代码去吧
################################################################
for img_slider in urls:
try:
async with session.get(img_slider, headers=headers) as slider:
slider_html = await slider.text() # 获取到网页源码
try:
pic_list_pattern = re.compile('var picList = \[(.*)?\];')
pic_list = "[{}]".format(pic_list_pattern.search(slider_html).group(1))
pic_json = json.loads(pic_list) # 图片列表已经拿到
print(pic_json)
except Exception as e:
print("代码调试错误")
print(pic_list)
print("*"*100)
print(e)
except Exception as e:
print("获取图片列表错误")
print(img_slider)
print(e)
continue
################################################################
print("{}已经操作完毕".format(url))
except Exception as e:
print("基本错误")
print(e)
图片最终的JSON已经拿到,最后一步,下载图片,当当当~~~~,一顿迅猛的操作之后,图片就拿下来了
async def fetch_img_url(num):
# 代码去上面找
async with aiohttp.ClientSession() as session:
# 获取轮播图地址
async with session.get(url,headers=headers) as response:
try:
# 代码去上面找
for img_slider in urls:
try:
async with session.get(img_slider, headers=headers) as slider:
# 代码去上面找
##########################################################
for img in pic_json:
try:
img = img["downloadPic"]
async with session.get(img, headers=headers) as img_res:
imgcode = await img_res.read() # 图片读取
with open("images/{}".format(img.split('/')[-1]), 'wb') as f:
f.write(imgcode)
f.close()
except Exception as e:
print("图片下载错误")
print(e)
continue
###############################################################
except Exception as e:
print("获取图片列表错误")
print(img_slider)
print(e)
continue
print("{}已经操作完毕".format(url))
except Exception as e:
print("基本错误")
print(e)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
图片会在你提前写好的images文件夹里面快速的生成
tasks最多可以开1024协程,但是建议你开100个就OK了,太多并发,人家服务器吃不消。
以上操作执行完毕,在添加一些细节,比如保存到指定文件夹,就OK了。
python从入门到入土图片_Python爬虫入门【7】: 蜂鸟网图片爬取之二相关推荐
- python爬取文字和图片_python爬虫--xpath结合re同时爬取文字与图片
还是老家的旅游网址:http://www.patour.cn/site/pananzxw/tcgl/index.html,将这些特产的图片及其介绍都爬取下来! 源码: 1 # -*- coding:u ...
- python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据
python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...
- python爬取豆瓣电影信息可行性分析_Python爬虫实现的根据分类爬取豆瓣电影信息功能示例...
本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口:if __name__ == '__main__': main()#! /usr/bin ...
- python爬斗鱼直播_Python爬虫:利用API实时爬取斗鱼弹幕
原标题:Python爬虫:利用API实时爬取斗鱼弹幕 这些天一直想做一个斗鱼爬取弹幕,但是一直考试时间不够,而且这个斗鱼的api接口虽然开放了但是我在github上没有找到可以完美实现连接.我看了好多 ...
- python爬虫快速下载图片_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...
Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象.近期我接触到了爬虫,被小小地震撼一下.总体的感觉就两个词--"强大"和"有趣".今天就跟大家分享 ...
- python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
1. 知乎文章图片爬取器之一写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. ...
- python爬虫入门实战争胜法_Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- python爬虫requests实战_Python爬虫之requests库网络爬取简单实战
实例1:直接爬取网页 实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页 实例3 : 分析请求参数,构造请求参数爬取所需网页 实例4: 爬取图片 实例5: 分析请求参数,构造请求参数爬取 ...
- python网页爬虫漫画案例_Python爬虫案例:js解密 爬取漫画
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python爬虫案例,作者麦自香 转载地址 https://blo ...
- python爬京东联盟_python爬虫框架scrapy实战之爬取京东商城进阶篇
前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧 ...
最新文章
- etcd工作原理和CentOS 7部署指南
- 在linux中安装软件会出的问题,linux中安装程序出现的问题
- 回溯法-框架+全排列+N皇后
- go run main.go 参数_介绍一款Go项目热编译工具gowatch
- adobe FMS(flash media server)错误解决小结
- 使用jsp页面查看jvm使用情况
- angularjs 资源集合
- 利用Echarts+百度地图API绘制可交互的行政区划地图(2021)
- 张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时
- 监控摄像机的视频摘要(Video Summarization of Surveillance Cameras)
- 用ps增加照片的气氛--镜头光晕
- Unity3D 车流线
- 苹果手机还原网络设置会怎样_苹果手机老是信号不好,只要掌握这4个小技巧,信号便能立马增强...
- string.h头文件
- IIC的OLED显示程序
- 通过例子说明CMMI各级别不同
- 保研面试/考研复试:英语口语面试必备话题及常用句型句式整理(四)
- Socket通信协议详解
- Qt飞机大战小游戏(c++从零开始实现)
- 去除csv文件中空行
热门文章
- 少儿学编程系列 --- 使用python程序暴力求解:数学游戏 24 Game的答案
- 工作中常用的英语缩写
- 如何用友远程到服务器,怎么安装用友T3远程通
- 计蒜客 农场看守(欧拉回路)
- Xcode真机调试 could not lunch failed to get reply to handshake packet
- Zap之日志记录器选择
- 什么是服务器、ip以及域名以及他们之间的联系
- 江苏省无锡市高二计算机小高考,江苏新高考高二还要考小高考吗?江苏新高考高中怎么分科?...
- 美团2018校园招聘 研发工程师(三)
- 美团点评2020年秋季校园招聘启动啦