Python爬虫多线程提升数据下载的性能优化 - Go语言中文社区

Python爬虫多线程提升数据下载的性能优化


Pyhton爬虫多线程提升数据下载的性能优化

很幸运地上了两次Tony老师关于python爬虫的课(收获巨多),在这里我对第一次课做一下知识总结:
1.什么是爬虫?
自动从网络上进行数据采集的程序

  • 一个网络蜘蛛就是一种机器人,或者软件代理。大体上,它从一组要访问的URL链接开始,可以称这些URL为种子。爬虫访问这些链接,它辨认出这些页面的所有超链接,然后添加到这个URL列表,可以称作检索前沿。这些URL按照一定的策略反复访问
  • 很多站点,尤其是搜索引擎,都使用爬虫提供最新的数据,它主要用于提供它访问过页面的一个副本,然后,搜索引擎就可以对得到的页面进行索引,以提供快速的访问。
  • 蜘蛛也可以在web上用来自动执行一些任务,例如检查链接,确认html代码;也可以用来抓取网页上某种特定类型信息,例如抓取电子邮件地址(通常用于垃圾邮件)。

2.为什么有爬虫?
场景:
(1).新浪新闻报道的新闻从哪里来的?
①新闻肯定最开始产生于记者,记者将新闻发布到某些平台
其他平台爬取并使用该平台记者所写的新闻,相当于一个人写了文章,另一个人推送文章
(2.)搜索引擎百度为什么可以承载属于其他网站的信息?
①百度很大一部分工作都是在运行自己的爬虫,采集其他网页并存储下来,等待搜索
②通过爬虫来不断补充自己的知识链,实时更新搜索的结果,内容
(3)电商平台
拼多多采集其他电商平台商品的价格浮动,处理分析
(4)大量数据样本需求
大数据的时代数据分析需要大量的数据样本,采集网络数据

3.在百度上搜索淘宝到得到淘宝的网站信息

  • 百度在万维网上爬取了淘宝网的信息,存储在自己的服务器里面,当我们搜索淘宝的时候,是如何从服务器的某个位置准确的把

这些信息找出来的呢?
DNS协议:解析域名:

  • DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
  • DNS允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。

尽管IP地址能够唯一地标记网络上的计算机,但IP地址是一长串数字,不直观,而且用户记忆十分不方便,于是人们又发明了另一套字符型的地址方案,即所谓的域名地址。IP地址和域名是一一对应的,这份域名地址的信息存放在一个叫域名服务器(DNS,Domain name server)的主机内,使用者只需了解易记的域名地址,其对应转换工作就留给了域名服务器。域名服务器就是提供IP地址和域名之间的转换服务的服务器。——摘自《百度百科》

淘宝的域名->淘宝的ip地址->用户通过ip地址请求服务器->服务器返还请求的淘宝信息->浏览器解析数据,显示界面

对真实的url路径进行动态的修改

  • 锁定抓取的目标,获得目标页面的url
    • 在堆糖网上搜索杨幂我们可以得到域名:
      https://www.duitang.com/search/?kw=杨幂&type=feed
      在我们的pycharm里面显示为:
      https://www.duitang.com/search/?kw=%E6%9D%A8%E5%B9%82&type=feed
      (中间的文字被替换成的字符串设计URL编码)在这里插入图片描述
    • 右键检查查看网页源代码在这里插入图片描述
      往下滑动网页发现:我们每滑动一段就会增加一个条目:
      (网页的动态加载/局部刷新)在这里插入图片描述
      点击其中的一个条目可以看到这个部分的url:
      在这里插入图片描述
  • 修改url
    • 删除不必要的成分
      在这里插入图片描述
    • 点开这个链接我们可以看到下面这个页面,复制页面的内容,在浏览器查找一个JSON解析网站,粘贴内容我们观察一下:
      这里显示的就是我们的局部页面的数据:total:3600 next_start:48
      说明该页面一共将显示3600张图片,下一个部分将从第48张开始,即每个部分显示48张图片在这里插入图片描述
      在这里插入图片描述
  • 修改url,让每次加载从0开始,最多加载1000张
    在这里插入图片描述
    再次访问链接,将新的网页上的数据内容进行解析可以看到变化:
    这次是每次加载100张,一共有3600张在这里插入图片描述在这里插入图片描述
  • 利用字符串进行数据查找,并提取数据
    在pycharm里面要用到第三方的请求库requests,在cmd里面用pip指令安装:pip install requests
    第一步请求获取服务器返回的数据

在这里插入图片描述

import requests
""" 利用字符串的格式化,每次访问不同的链接,从index开始请求图片数据
	用get请求数据,如上图网页已经做出要求
	最后的数据都存储在str_get列表里面
"""
URL="https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%9D%A8%E5%B9%82&start={}&limit=3600"
str_get=[]
for index in range(0,3600,100):
     URL.format(index)
     s=requests.get(URL).content.decode("utf-8")
     str_get.append(s)

第二部解析数据:提取需要的内容(图片的链接)
将得到的url存储在url_all列表里

left_part='"https:'
right_part= '"'
url_all=[]
for s in str_get:
     ip_get = []
     start=0
     while s.find(left_part, start)!=-1:
          l = s.find(left_part, start)
          r=s.find(right_part,l+1)
          url=s[l+1:r]
          url_get.append(url)
          start=r
          print(url)
     url_all.extend(url_get)
  • 存储数据
    从得到的图片链接获得图片
numbers=0
for url in ip_all:
     numbers+=1
     data=requests.get(url)
     path="image/"+str(numbers)+".jpg"
     with open(path,'wb+') as file:
          file.write(data.content)

然后我们可以在左侧看到存储的图片了
在这里插入图片描述

到此我们已经成功爬取到了杨幂的图片了

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43496675/article/details/104468539
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢