吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4603|回复: 52
收起左侧

[Python 转载] 【小爬系列】也爬个小姐姐

[复制链接]
smallchen 发表于 2021-1-16 13:55
本帖最后由 smallchen 于 2021-3-14 08:52 编辑

别人的贴:@OnlineYx  @l2430478
        https://www.52pojie.cn/thread-1348486-1-3.html
        https://www.52pojie.cn/thread-1349446-1-1.html
看别人只能爬一页或几页,我就在想能不能都爬下来,下面开始说思路:
1、首先想到的是先把分类全都加载出来,比如专辑汇总,可是打开后发现有重复,应该数据是不全的或者是有其他入口,跳过
image.png
2、然后是看到了搜索按钮,于是试一下能不能sql注入,失败
image.png
3、发现下方有个sitemap,打开看下,可以是可以,但太累了,跳过
image.png
4、最后发现了个好地方
image.png
站长似乎把所有的文章都列在了这个地方,以数量规模来看,一共1320条,应该是数据库查询然后自动生成的,所以,开始爬!
以下为代码:
[Python] 纯文本查看 复制代码
# requests 请求 需要提前安装 pip install requests
# xpath 解析 需要提前安装 pip install lxml

import os
import requests
from lxml import etree

if __name__ == '__main__':
    base_url = 'https://www.vmgirls.com/'
    archives_url = base_url + 'archives.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'
    }
    count = 1
    page_now_count = 1
    all_res = requests.get(url=archives_url, headers=headers).text
    html = etree.HTML(all_res)
    item_list = html.xpath('//ul[@class="al_post_list"]/li')
    if item_list:
        if not os.path.exists('girls'):
            os.mkdir('girls')
        page_all_count = len(item_list)
        for item in item_list:
            #if page_now_count < 1300:
                #page_now_count += 1
                #continue
            date = item.xpath('./text()')[0]
            title = item.xpath('./a/text()')[0]
            item_url = item.xpath('./a/@href')[0]
            item_url = base_url + item_url
            item_res = requests.get(url=item_url, headers=headers).text
            html = etree.HTML(item_res)
            girls = html.xpath('//div[@class="post-content"]/div[@class="nc-light-gallery"]//img')
            if not girls:
                girls = html.xpath('//ul[@class="blocks-gallery-grid"]/li[@class="blocks-gallery-item"]/figure/a/img')
            i = 1
            if girls:
                for girl in girls:
                    girl_alt = girl.xpath('./@alt')[0]
                    girl_img = 'https:' + girl.xpath('./@src')[0]
                    if not os.path.exists('girls/' + title):
                        os.mkdir('girls/' + title)
                    img_data = requests.get(girl_img, headers=headers).content
                    with open('girls/' + title + '/' + str(i) + ".jpeg", 'wb') as f:
                        f.write(img_data)
                        #print(title + "-" + str(i) + "  下载完成!")
                        count += 1
                    i += 1
            else:
                print(item_url, '解析不到')
            print('(', str(page_now_count), '/', str(page_all_count), ')【', title, '】已完成【', str(i), '】张图片')
            page_now_count += 1
    print('|=================完成(', str(count), ')=================|')




image.png

结束语:
        本来想用scrapy框架,就一个界面没必要台繁琐,还是原生requests爽
        爬着爬着发现页面的图片位置跟不上了,仔细一看好像站长做的好像并不是图集,而是文章,所以改了一行代码
girls = html.xpath('//div[@class="post-content"]/div[@class="nc-light-gallery"]//img')
if not girls:
    girls = html.xpath('//ul[@class="blocks-gallery-grid"]/li[@class="blocks-gallery-item"]/figure/a/img')

谢谢大佬的request详解,https://www.52pojie.cn/thread-1351042-1-1.html

那就这样吧,结束!
image.png

免费评分

参与人数 5吾爱币 +4 热心值 +5 收起 理由
chooper + 1 + 1 用心讨论,共获提升!
冷酷到底 + 1 + 1 谢谢@Thanks!
蜡笔大雄 + 1 + 1 妙啊
lizhengpu + 1 热心回复!
伯牙 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

 楼主| smallchen 发表于 2021-1-16 16:08
Future_availabi 发表于 2021-1-16 16:06
试过了,各种格式不行,十有八九是电脑问题了,唉

百度我搜到了很多解决办法,你可以试一下

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Future_availabi + 1 + 1 谢谢@Thanks!

查看全部评分

冷酷到底 发表于 2021-3-14 18:40
smallchen 发表于 2021-3-14 08:54
已处理,第41行改为girl_img = 'https:' + girl.xpath('./@src')[0]

又出来新问题
( 3 / 1338 )【 冬夏 】已完成【 7 】张图片
Traceback (most recent call last):
  File "D:\Program Files\Python38\main.py", line 43, in <module>
    img_data = requests.get(girl_img, headers=headers).content
  File "D:\Program Files\Python38\lib\site-packages\requests\api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
不羁的风儿 发表于 2021-1-16 13:56
前尘旧梦 发表于 2021-1-16 14:01
我觉得我两可以交流学习一下
Cool_Breeze 发表于 2021-1-16 14:05
不羁的风儿 发表于 2021-1-16 13:56
来52学习技术的,怎么越学身体越来越差了

哪都有你,真的是够闲啊!
cdygr 发表于 2021-1-16 14:06
不羁的风儿 发表于 2021-1-16 13:56
来52学习技术的,怎么越学身体越来越差了

好好反思一下吧
上青天 发表于 2021-1-16 14:08
哎呦喂,O(∩_∩)O哈哈~
O炮酱 发表于 2021-1-16 14:10
我总能学到一些特别的技能~~~
列明 发表于 2021-1-16 14:14
作者就是見多識廣啊!
收藏了先!
王帅哥 发表于 2021-1-16 14:15
?s=a+or+1%3D1
求教这个是啥
 楼主| smallchen 发表于 2021-1-16 14:17
王帅哥 发表于 2021-1-16 14:15
?s=a+or+1%3D1
求教这个是啥

搜索框输入a or 1=1 ,数据库判断的时候会将1=1作为查询标准,所以会返回全部数据,这种的叫sql注入
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-1-16 06:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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