吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2863|回复: 9
收起左侧

[Python 转载] 萌新的第一个爬虫成品,发上来,共勉一下。

  [复制链接]
user999 发表于 2022-4-22 15:51
本帖最后由 user999 于 2022-4-22 21:51 编辑

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

[Python] 纯文本查看 复制代码
#!/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('所有任务全部完毕,请注意身体')

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
regan + 1 + 1 用心讨论,共获提升!
52shijie + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
大佬还有没有其他这种类似的网站

暂时没有。我还在学习呢。
xxwwcc250 发表于 2022-8-4 21:16
跑了半个小时,出了个错:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
xxwwcc250 发表于 2022-8-4 21:19
xxwwcc250 发表于 2022-8-4 21:16
跑了半个小时,出了个错:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的 ...

不知道是不是被检测了异常请求,然后中断了
neteast 发表于 2022-8-4 22:00
这个网址很哇塞
不对,这个代码写的很哇塞
堂大湿不会编程 发表于 2022-8-23 14:58
我擦,这代码有点秀,执行了下,爬了一堆大尺度的。。。话说这测试代码也有风险。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表