2021-01-27

爬虫学习第三天


文章目录

  • 爬虫学习第三天
  • 前言
  • 一、步骤
    • 1.思想
    • 2.具体代码实现
  • 总结


前言

今天初步了解了多线程,线程池等概念,找以前的网站试试手!


一、步骤

1.思想

当同时下载多个网站的图片时,之前的办法就像吃饭和刷剧不同时进行一样,不仅浪费时间还不爽,所以应用多线程之后就能实现吃饭的时候刷剧了,需要的一些知识https://editor.csdn.net/md/?articleId=113173629 基本都在这,后续还将会进行。说一下我理解的思想吧,就是将发起请求到存储封装在函数里,把url当成变量,后续调用函数的时候就能同时爬取多个url的内容。

2.具体代码实现

<font color=#999AAA >
import requests
from lxml import etree
from multiprocessing.dummy import Pool
url = 'https://www.52dmtp.com/pcwallpaper/index_15.html'
headers = {
     
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
start=time.time()
#封装函数
def func(url){
     
    # 发起请求获得数据
response = requests.get(url=url,headers=headers).text
# 树化处理返回的数据
tree = etree.HTML(response)
# 定位查找li列表
li_list = tree.xpath('//div[@class="w1200 r content"]/ul/li')
print(li_list)
# 循环读取列表中每一条li

for li in li_list:
    data = li.xpath('./div/a/img/@src')[0]
    name = li.xpath('./div/a/img/@alt')[0]
    # 遇到乱码就用这个转换
    name = name.encode('iso-8859-1').decode('utf-8')
    # 由于有的名字太长了,所以弄短一点
    name = name[0:10]+'.jpg'
    a = requests.get(url=data,headers=headers).content
    with open(name,'w') as fp:
        fp.write(a)
}
#这个地方要创建一个人物列表
renwu_list=[填入要下载的url]
#初始化一个线性池
pool=pool(2)
#把url传入
pool.map(func,renwu_list)
#调用函数,括号里填入需要的url
func()
func()
#计算一下时间
end=time.time()
print("用时"+str(end-start))

(因为网络问题具体的网址就没有填进去)
今天出了一个问题是with open( ‘./bc.png’,‘wb’,,encoding=‘utf-8’) as zp: 不需要,encoding=‘utf-8’,不是所有东西都要解码,那什么时候需要解码呢?下面是我搜到的

计算机只认识二进制(或者说字节),所以我们需要把人能识别的文字(字符串)转换成字节串,也就是encode过程。

相应地,从字节串到字符串,就是decode过程。

总结

在这个快节奏的时代,大篇幅的文章让人看起来就比较烦,枯燥的像高数课本一样难以产生兴趣,在学技术的同时慢慢练习一下自己的文笔!明天见! 不 今天早上见!

你可能感兴趣的:(爬虫学习,python)