『赠书活动 | 第十七期』《Python网络爬虫:从入门到实战》

以你之姓@ 2024-04-22 19:02 162阅读 0赞

在这里插入图片描述

?wei_shuo的个人主页

?wei_shuo的学习社区

?Hello World !


『赠书活动 | 第十七期』

本期书籍:《Python网络爬虫:从入门到实战》


赠书规则:评论区:点赞|收藏|留言


评论区留言:”人生苦短,我用Java”


活动截止时间:8月21日


赠书数量:2


Tip:中奖后博主私信通知 | 三天内不回复将视为 | 自动放弃

书籍介绍

本书介绍了Python3网络爬虫的常见技术。首先介绍了网页的基础知识,然后介绍了urllib、Requests请求库以及XPath、Beautiful Soup等解析库,接着介绍了selenium对动态网站的爬取和Scrapy爬虫框架,最后介绍了Linux基础,便于读者自主部署编写好的爬虫脚本

进程和线程

进程可以理解为是正在运行的程序的实例。进程是拥有资源的独立单位,而线程不是独立的单位。由于每一次调度进程的开销比较大,为此才引入的线程。一个进程可以拥有多个线程,一个进程中可以同时存在多个线程,这些线程共享该进程的资源,线程的切换消耗是很小的。因此在操作系统中引入进程的目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量;而引入线程的目的则是减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能

单线程改为多线程

  1. import requests
  2. from lxml import etree
  3. import time
  4. import os
  5. dirpath = '图片/'
  6. if not os.path.exists(dirpath):
  7. os.mkdir(dirpath) # 创建文件夹
  8. header = {
  9. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
  10. }
  11. def get_photo():
  12. url = 'https://www.huya.com/g/4079/' # 目标网站
  13. response = requests.get(url=url, headers=header) # 发送请求
  14. data = etree.HTML(response.text) # 转化为html格式
  15. return data
  16. def jiexi():
  17. data = get_photo()
  18. image_url = data.xpath('//a//img//@data-original')
  19. image_name = data.xpath('//a//img[@class="pic"]//@alt')
  20. for ur, name in zip(image_url, image_name):
  21. url = ur.replace('?imageview/4/0/w/338/h/190/blur/1', '')
  22. title = name + '.jpg'
  23. response = requests.get(url=url, headers=header) # 在此发送新的请求
  24. with open(dirpath + title, 'wb') as f:
  25. f.write(response.content)
  26. print("下载成功" + name)
  27. time.sleep(2)
  28. if __name__ == '__main__':
  29. jiexi()
  30. if __name__ == "__main__":
  31. threads = []
  32. start = time.time()
  33. # 创建四个进程
  34. for i in range(1, 5):
  35. thread = threading.Thread(target=jiexi(), args=(i,))
  36. threads.append(thread)
  37. thread.start()
  38. for thread in threads:
  39. thread.join()
  40. end = time.time()
  41. running_time = end - start
  42. print('总共消耗时间 : %.5f 秒' % running_time)
  43. print("全部完成!") # 主程序

在这里插入图片描述

作者简介

在这里插入图片描述

内容结构及配套资源

在这里插入图片描述

在这里插入图片描述

抽奖时间:2023.8.21
公布方式:评论区公布,私信通知


? 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞?收藏⭐️评论?


在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读