资讯专栏INFORMATION COLUMN

Python爬虫入门教程 8-100 蜂鸟网图片爬取之三

wfc_666 / 1926人阅读

摘要:蜂鸟网图片啰嗦两句前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用希望你喜欢爬取页面本篇教程还是基于学习的目的,为啥选择蜂鸟,没办法,我瞎选的。

1. 蜂鸟网图片-啰嗦两句

前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用aiohttp 希望你喜欢
爬取页面https://tu.fengniao.com/15/ 本篇教程还是基于学习的目的,为啥选择蜂鸟,没办法,我瞎选的。

一顿熟悉的操作之后,我找到了下面的链接
https://tu.fengniao.com/ajax/ajaxTuPicList.php?page=2&tagsId=15&action=getPicLists

这个链接返回的是JSON格式的数据

page =2页码,那么从1开始进行循环就好了

tags=15 标签名称,15是儿童,13是美女,6391是私房照,只能帮助你到这了,毕竟我这是专业博客 ヾ(◍°∇°◍)ノ゙

action=getPicLists接口地址,不变的地方

2. 蜂鸟网图片-数据有了,开爬吧

</>复制代码

  1. import aiohttp
  2. import asyncio
  3. headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
  4. "X-Requested-With": "XMLHttpRequest",
  5. "Accept": "*/*"}
  6. async def get_source(url):
  7. print("正在操作:{}".format(url))
  8. conn = aiohttp.TCPConnector(verify_ssl=False) # 防止ssl报错,其中一种写法
  9. async with aiohttp.ClientSession(connector=conn) as session: # 创建session
  10. async with session.get(url, headers=headers, timeout=10) as response: # 获得网络请求
  11. if response.status == 200: # 判断返回的请求码
  12. source = await response.text() # 使用await关键字获取返回结果
  13. print(source)
  14. else:
  15. print("网页访问失败")
  16. if __name__=="__main__":
  17. url_format = "https://tu.fengniao.com/ajax/ajaxTuPicList.php?page={}&tagsId=15&action=getPicLists"
  18. full_urllist= [url_format.format(i) for i in range(1,21)]
  19. event_loop = asyncio.get_event_loop() #创建事件循环
  20. tasks = [get_source(url) for url in full_urllist]
  21. results = event_loop.run_until_complete(asyncio.wait(tasks)) #等待任务结束

上述代码在执行过程中发现,顺发了20个请求,这样子很容易就被人家判定为爬虫,可能会被封IP或者账号,我们需要对并发量进行一下控制。
使Semaphore控制同时的并发量

</>复制代码

  1. import aiohttp
  2. import asyncio
  3. # 代码在上面
  4. sema = asyncio.Semaphore(3)
  5. async def get_source(url):
  6. # 代码在上面
  7. #######################
  8. # 为避免爬虫一次性请求次数太多,控制一下
  9. async def x_get_source(url):
  10. with(await sema):
  11. await get_source(url)
  12. if __name__=="__main__":
  13. url_format = "https://tu.fengniao.com/ajax/ajaxTuPicList.php?page={}&tagsId=15&action=getPicLists"
  14. full_urllist= [url_format.format(i) for i in range(1,21)]
  15. event_loop = asyncio.get_event_loop() #创建事件循环
  16. tasks = [x_get_source(url) for url in full_urllist]
  17. results = event_loop.run_until_complete(asyncio.wait(tasks)) #等待任务结束

走一波代码,出现下面的结果,就可以啦!

在补充上图片下载的代码

</>复制代码

  1. import aiohttp
  2. import asyncio
  3. import json
  4. # 代码去上面找
  5. async def get_source(url):
  6. print("正在操作:{}".format(url))
  7. conn = aiohttp.TCPConnector(verify_ssl=False) # 防止ssl报错,其中一种写法
  8. async with aiohttp.ClientSession(connector=conn) as session: # 创建session
  9. async with session.get(url, headers=headers, timeout=10) as response: # 获得网络请求
  10. if response.status == 200: # 判断返回的请求码
  11. source = await response.text() # 使用await关键字获取返回结果
  12. ############################################################
  13. data = json.loads(source)
  14. photos = data["photos"]["photo"]
  15. for p in photos:
  16. img = p["src"].split("?")[0]
  17. try:
  18. async with session.get(img, headers=headers) as img_res:
  19. imgcode = await img_res.read()
  20. with open("photos/{}".format(img.split("/")[-1]), "wb") as f:
  21. f.write(imgcode)
  22. f.close()
  23. except Exception as e:
  24. print(e)
  25. ############################################################
  26. else:
  27. print("网页访问失败")
  28. # 为避免爬虫一次性请求次数太多,控制一下
  29. async def x_get_source(url):
  30. with(await sema):
  31. await get_source(url)
  32. if __name__=="__main__":
  33. #### 代码去上面找

图片下载成功,一个小爬虫,我们又写完了,美滋滋



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19545.html

相关文章

  • Python爬虫入门教程 8-100 蜂鸟图片爬取之三

    摘要:蜂鸟网图片啰嗦两句前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用希望你喜欢爬取页面本篇教程还是基于学习的目的,为啥选择蜂鸟,没办法,我瞎选的。 1. 蜂鸟网图片-啰嗦两句 前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用aiohttp 希望你喜欢爬取页面https://tu.fengniao.com/15/ 本篇教程还是基于学习的...

    int64 评论0 收藏0
  • Python爬虫入门教程 7-100 蜂鸟图片取之

    摘要:蜂鸟网图片简介今天玩点新鲜的,使用一个新库,利用它提高咱爬虫的爬取速度。上下文不在提示,自行搜索相关资料即可创建一个对象,然后用该对象去打开网页。可以进行多项操作,比如等代码中等待网页数据返回创建线程,方法负责安排执行中的任务。 1. 蜂鸟网图片-简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度。 安装模块常规套路 pip install aiohtt...

    z2xy 评论0 收藏0
  • Python爬虫入门教程 7-100 蜂鸟图片取之

    摘要:蜂鸟网图片简介今天玩点新鲜的,使用一个新库,利用它提高咱爬虫的爬取速度。上下文不在提示,自行搜索相关资料即可创建一个对象,然后用该对象去打开网页。可以进行多项操作,比如等代码中等待网页数据返回创建线程,方法负责安排执行中的任务。 1. 蜂鸟网图片-简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度。 安装模块常规套路 pip install aiohtt...

    hufeng 评论0 收藏0

发表评论

0条评论

wfc_666

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<