user999 发表于 2022-4-22 15:51

萌新的第一个爬虫成品,发上来,共勉一下。

本帖最后由 user999 于 2022-4-22 21:51 编辑

目标网站代码里有。{:1_918:}。不敢直接放是因为衣服太少。不合适。{:1_896:}
起始页面是一个排行页面,是单页,遍历一遍以后,进入子页面,是一个需要翻页的页面。
我这里对页面处理的办法,就是直接XPATH对应元素,然后统计里面的个数。弄了个小循环。
然后保存的时候,每个目标开始都有提示在爬谁,中途有提示一共多少页,当前多少页。最后结束的时候,有对应的中期提示和完全结束的提示。
因为我这网络不行,我就爬了第一个。目测没啥问题。
代码很水,我是初学者,佬勿喷新{:1_905:},新学的小伙伴,我们可以一起提高。{:1_893:}
注:我还没研究明白函数,所以当下只能纯手撸。。。。

#!/usr/bin/evn python 3
# -*- coding: utf-8 -*-
import requests
import parsel
import os

url = 'https://www.imn5.net/hot.html'
headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36'
}
# 网址头部备用,注意不需要留/
web = 'https://www.imn5.net'
linkTemp = requests.get(url=url, headers=headers)
# 源码中文乱码,处理一下
linkTemp.encoding = linkTemp.apparent_encoding
linkAll = parsel.Selector(linkTemp.text).xpath('//div[@class="excerpts"]/article//div[@class="imgbox"]')

for linkScan in linkAll:
      title = linkScan.xpath('./a/@alt').get()
      linkDown = linkScan.xpath('./a/@href').get()
      linkUse = web + linkDown
      picTemp = requests.get(url=linkUse, headers=headers)
      picTemp.encoding = picTemp.apparent_encoding
      # 统计一下页码总数,作为下一个循环参考
      picPage = len(
                parsel.Selector(requests.get(url=linkUse, headers=headers).text).xpath('//div[@class="page"]/a').getall()) - 1
      # 去掉地址当中.html部分
      linkUse_1 = linkUse.replace('.html', '')

      if not os.path.exists('img\\' + title):
                os.mkdir('img\\' + title)
                print(f'---正在保存{title}---')

      # 注意页码需要在基础上+1
      for page in range(1, picPage + 1):
                linkUse_2 = linkUse_1 + '_' + str(page) + '.html'
                picDown = parsel.Selector(requests.get(url=linkUse_2, headers=headers).text).xpath(
                        '//div[@class="imgwebp"]/p/img/@src').getall()
                print(f'---一共{picPage}页,当前第{page}页---')

                for picScan in picDown:
                        picAdd = web + picScan
                        picData = requests.get(url=picAdd, headers=headers).content
                        filename = picScan.split('/')[-1]
                        with open(f'img\\{title}\\{filename}', 'wb') as f:
                              f.write(picData)

      print('---当前相册完毕,进入下一轮任务---')

print('所有任务全部完毕,请注意身体')

Hmily 发表于 2022-4-22 21:41

先把标题改了,你的标题应该是内容总结,而不是你现在的。

LZL18589355690 发表于 2022-4-23 10:08

大佬还有没有其他这种类似的网站

醉里流年 发表于 2022-4-23 10:39

学习了,我想问下如果一个网站,查看源代码看不到这些元素,但用审查元素可以看到,这样也可以抓取吗

user999 发表于 2022-4-23 11:00

醉里流年 发表于 2022-4-23 10:39
学习了,我想问下如果一个网站,查看源代码看不到这些元素,但用审查元素可以看到,这样也可以抓取吗

主要工作,还是在元素审查里多一些。源代码那块,影响不大。

user999 发表于 2022-4-23 11:08

LZL18589355690 发表于 2022-4-23 10:08
大佬还有没有其他这种类似的网站

暂时没有。我还在学习呢。{:1_926:}

xxwwcc250 发表于 2022-8-4 21:16

跑了半个小时,出了个错:ConnectionAbortedError: 你的主机中的软件中止了一个已建立的连接。

xxwwcc250 发表于 2022-8-4 21:19

xxwwcc250 发表于 2022-8-4 21:16
跑了半个小时,出了个错:ConnectionAbortedError: 你的主机中的软件中止了一个已建立的 ...

不知道是不是被检测了异常请求,然后中断了

neteast 发表于 2022-8-4 22:00

这个网址很哇塞
不对,这个代码写的很哇塞

堂大湿不会编程 发表于 2022-8-23 14:58

我擦,这代码有点秀,执行了下,爬了一堆大尺度的。。。话说这测试代码也有风险。。
页: [1]
查看完整版本: 萌新的第一个爬虫成品,发上来,共勉一下。