爬取某网站中的图片数据(爬虫案例) --原创作者

@author: 羽兮39

@time: 2022/12/16 00: 24

憋火,火了我八成要寄。

是一个爬虫的综合案例,包含了urllib库中request的使用和lxml的使用。

lxml数据解析库可以使用命令下载:

pip install lxml

可能会有些人有这样的问题:

我在命令行直接运行你的命令显示没有pip命令或者我pip下载之后我pycharm还是报错说没有这个包。

问题可能在哪里?

你是直接安装的anacond的环境,并且将它作为你pycharm的python环境来使用。

所以会有第一种情况。

第二种情况是因为你可能有多个python的版本,pip命令的执行环境是以你的环境变量的顺序来决定的。而下载了lxml库的python环境可能和你pycharm中使用的python环境不一样。所以它找不到你的lxml库。

解决方法:

1. 将anaconda目录下的Scripts目录添加进环境变量PATH中。

2. 改变你的pycharm的python解释器的选择。

解决了这些问题,直接看代码吧,没有复杂的使用,比如说动态cookie和代理池什么的,所以可能你们运行的时候会被检测到,导致下载不全。实现方法好像也不太好有点。。。速度太慢,初期版本你们可以改良改良。(开头的注释忘记哪里有错了,呃呃)

import urllib.request
from lxml import etree
import tools

"""
www.moeacg.org:
    url:
        root:
            https://www.moeacg.org/

        inner:
            root + a-url

    a-title:
        //span[contains(@class, "video-title")]/text()

    a-url:
        //a[contains(@href, "moehome")]/@href  # 有重复的用集合存储

www.moeacg.org+a-url:
    img-url:
        //div[contains(@class, "owl-item")]/div/img/@src
    target-url:
        a:
            //a[contains(@class, "col btn btn-primary")]/@href  [string中包含"/moeupup"的页面]

www.moeacg.org+target-url:
    imgs-url:
        //img[contains(@class, "comic_img")]/@data-original
"""
direc_file = 'D:/Data/水淼Aqua - Ganyu/'  # 这个目录是想要将资源文件输出到的目标路径

# 第一步,进入主页
root_url = 'https://www.moeacg.org/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}

# 请求对象定制
request_root = urllib.request.Request(url=root_url, headers=headers)  # 我笨逼了本来可以在这里就一路用opener的

# 模拟网页请求
response_root = urllib.request.urlopen(request_root)

# 获取相应内容
content_root = response_root.read().decode('utf-8')

# 解析内容信息
tree_root = etree.HTML(content_root)

# 获取想要的内容
results_root = tree_root.xpath('//a[contains(@href, "moehome")]/@href |\
 //div[contains(@class, "col-xs-6")]//div[@class="thumb-overlay-albums"]/a/@href')  # 建议使用Chrome浏览器的插件商店的xpath

# 第二步,选择一个内容进入
# 获取url序列
inter_url = 'https://www.moeacg.org'

inter_url_list = []
for result_root in results_root:
    inter_url_list.append(inter_url+result_root)

# 随便取一个,进入下一项
request_inter = urllib.request.Request(url=inter_url_list[0], headers=headers)

# 模拟web请求
response_inter = urllib.request.urlopen(request_inter)

# 获取内容
content_inter = response_inter.read().decode('utf-8')

# 解析内容
tree_inter = etree.HTML(content_inter)

# 处理内容
results_inter = tree_inter.xpath('//a[contains(@class, "col btn btn-primary")]/@href')

wait_delete_results_inter = []
for result_inter in results_inter:
    if result_inter.find('/moeupup') == -1:
        wait_delete_results_inter.append(result_inter)

for wait_delete_result_inter in wait_delete_results_inter:
    del results_inter[results_inter.index(wait_delete_result_inter)]
# 第三步,找到一个button进入分页
end_url = inter_url+results_inter[0]

# 封装
request_end = urllib.request.Request(url=end_url, headers=headers)

# 请求
response_end = urllib.request.urlopen(request_end)

# 获取数据
content_end = response_end.read().decode('utf-8')

# 解析数据
tree_end = etree.HTML(content_end)

# 获得需要的内容
results_end = tree_end.xpath('//img[contains(@class, "comic_img")]/@data-original')
titles = tree_end.xpath('//title/text()')
title = titles[0].replace('-下拉观看', '')
title = title.replace(' ', '')

# 第四步,获取图片
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36')]
urllib.request.install_opener(opener=opener)
i = 1  # i 的作用是加一个编号

for image in results_end:
    urllib.request.urlretrieve(image, direc_file+title+str(i)+'.jpg')
    print('downloading ', image)
    i += 1

原创内容,转载请私信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值