蜂鸟网图片--简介

今天玩点新鲜的,使用一个新库 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('

([\s\S.]*?)

')

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】: 蜂鸟网图片爬取之二相关推荐

  1. python爬取文字和图片_python爬虫--xpath结合re同时爬取文字与图片

    还是老家的旅游网址:http://www.patour.cn/site/pananzxw/tcgl/index.html,将这些特产的图片及其介绍都爬取下来! 源码: 1 # -*- coding:u ...

  2. python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据

    python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...

  3. python爬取豆瓣电影信息可行性分析_Python爬虫实现的根据分类爬取豆瓣电影信息功能示例...

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口:if __name__ == '__main__': main()#! /usr/bin ...

  4. python爬斗鱼直播_Python爬虫:利用API实时爬取斗鱼弹幕

    原标题:Python爬虫:利用API实时爬取斗鱼弹幕 这些天一直想做一个斗鱼爬取弹幕,但是一直考试时间不够,而且这个斗鱼的api接口虽然开放了但是我在github上没有找到可以完美实现连接.我看了好多 ...

  5. python爬虫快速下载图片_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...

    Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象.近期我接触到了爬虫,被小小地震撼一下.总体的感觉就两个词--"强大"和"有趣".今天就跟大家分享 ...

  6. python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    1. 知乎文章图片爬取器之一写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. ...

  7. python爬虫入门实战争胜法_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  8. python爬虫requests实战_Python爬虫之requests库网络爬取简单实战

    实例1:直接爬取网页 实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页 实例3 : 分析请求参数,构造请求参数爬取所需网页 实例4: 爬取图片 实例5: 分析请求参数,构造请求参数爬取 ...

  9. python网页爬虫漫画案例_Python爬虫案例:js解密 爬取漫画

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python爬虫案例,作者麦自香 转载地址 https://blo ...

  10. python爬京东联盟_python爬虫框架scrapy实战之爬取京东商城进阶篇

    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧 ...

最新文章

  1. etcd工作原理和CentOS 7部署指南
  2. 在linux中安装软件会出的问题,linux中安装程序出现的问题
  3. 回溯法-框架+全排列+N皇后
  4. go run main.go 参数_介绍一款Go项目热编译工具gowatch
  5. adobe FMS(flash media server)错误解决小结
  6. 使用jsp页面查看jvm使用情况
  7. angularjs 资源集合
  8. 利用Echarts+百度地图API绘制可交互的行政区划地图(2021)
  9. 张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时
  10. 监控摄像机的视频摘要(Video Summarization of Surveillance Cameras)
  11. 用ps增加照片的气氛--镜头光晕
  12. Unity3D 车流线
  13. 苹果手机还原网络设置会怎样_苹果手机老是信号不好,只要掌握这4个小技巧,信号便能立马增强...
  14. string.h头文件
  15. IIC的OLED显示程序
  16. 通过例子说明CMMI各级别不同
  17. 保研面试/考研复试:英语口语面试必备话题及常用句型句式整理(四)
  18. Socket通信协议详解
  19. Qt飞机大战小游戏(c++从零开始实现)
  20. 去除csv文件中空行

热门文章

  1. 少儿学编程系列 --- 使用python程序暴力求解:数学游戏 24 Game的答案
  2. 工作中常用的英语缩写
  3. 如何用友远程到服务器,怎么安装用友T3远程通
  4. 计蒜客 农场看守(欧拉回路)
  5. Xcode真机调试 could not lunch failed to get reply to handshake packet
  6. Zap之日志记录器选择
  7. 什么是服务器、ip以及域名以及他们之间的联系
  8. 江苏省无锡市高二计算机小高考,江苏新高考高二还要考小高考吗?江苏新高考高中怎么分科?...
  9. 美团2018校园招聘 研发工程师(三)
  10. 美团点评2020年秋季校园招聘启动啦