@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
原创内容,转载请私信。