python3 简单爬虫入门 抓取男神图
创始人
2024-06-01 09:04:16

主要目的 为 快速爬虫入门
参考:https://blog.csdn.net/c406495762/article/details/72597755

注意编写日期:2023-3-9

如果时间过久,则代码可能会失效,如果失效,可以根据下面的解析过程,手动更新代码。

页面解析

1.主页面解析,进入网站,往下滚动,找到有很多图像的区域,该区域为主要内容区;
2.任意右键一个主要图像打开菜单,选中审查元素,打开 DOM树分析器。
3.观察DOM树,找到需要的标签的位置,记下它的特征,如本文:ul 标签 和 属性class="g-gxlist-imgbox " 就是主要内容区的特征
4.继续右键其他主要图像,选中审查元素,观察规律,可知:a 标签,带有 title 属性的即为入口区的特征
在这里插入图片描述
5.任意选一个图像进入子页面
6.往下滚动,随便右键一张大图,使用审查元素,打开DOM树解析器。
7.观察DOM树,找到主内容区域的特征:div 标签,包含属性 id=“zoom” class=“m_qmview”
8.往下看,找到评论标签的特征:p 标签,它的子标签不包含任何 img 标签
9.继续看,找到图像标签的特征:p 标签,子标签里面有一个 img 标签
在这里插入图片描述
10.根据以上特征,把链接提取出来,与站点链接拼接在一起,使用requests下载和保存/

完整代码和使用方法

首次安装python3后,使用请使用以下命令安装依赖库

pip install -U beautifulsoup4 requests

以下为完整代码,保存以下代码 到一个记事本文件中。
例如保存到 get.txt 里面
然后改名 get.txt 到 get.py
然后执行 python get.py 即可启动程序

#导入需要的库
import os
import time
import requests
from bs4 import BeautifulSoup
import urllib.parse# 切换到当前文件夹
os.chdir(os.path.dirname(__file__))# 要爬取的页面
url = 'http://www.shuaia.net/tp/shuaigetp/'
print('要爬取的链接:' + url)# 获得页面的主站链接
url_parse = urllib.parse.urlparse(url)
base_url = url_parse.scheme + '://' + url_parse.netloc
print('主站链接:' + base_url)# 设定请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}# 下载主页面
req = requests.get(url=url, headers=headers)
req.encoding = 'utf8'# 解析主页面
soup = BeautifulSoup(req.text, 'lxml')# 通过 class 属性获得主要内容区域
main_page = soup.find_all(class_='g-gxlist-imgbox')[0]# 获得每一个子页面入口的url
sub_pages = []# 通过 a 标签搜索入口标签
for sub_page_entry in main_page.find_all('a'):# 如果入口标签有 title 属性,则认为是有效入口点if 'title' in sub_page_entry.attrs:# 获得子页面的标题new_title = sub_page_entry['title']# 获得子页面的url,并组装起来new_url = base_url + sub_page_entry['href']# 保存子页面的标题和链接到 sub_pages 列表中sub_pages.append([new_title, new_url])# 循环下载解析每一个子页面,同时下载图像
for sub_title, sub_url in sub_pages:print('正在扫描子页面', sub_title, sub_url)print('子页面标题:'+sub_title)print('子页面链接:'+sub_url)# 生成一个文件夹os.makedirs(sub_title, exist_ok=True)# 打开一个文本文件,用来记录评论info_file = open(sub_title+'/info.txt', 'w', encoding='utf8')# 下载子页面sub_req = requests.get(url=sub_url, headers=headers)sub_req.encoding = 'utf8'# 解析子页面sub_soup = BeautifulSoup(sub_req.text, 'lxml')# 获得子页面主要内容区域sub_img_list = sub_soup.find_all('div', id='zoom', class_="m_qmview")[0]# 使用 p 标签搜索主要内容区域的图像for each_idx, each_img in enumerate(sub_img_list.find_all('p')):img_contents = each_img.find_all('img')# 如果该标签没有图像,那么该标签是一个评论标签if len(img_contents) == 0:info_file.write(each_img.text)else:# 获得子图像部分链接image_url = img_contents[0]['src']# 拼接为完整的子图像链接image_url = base_url + image_url# 拼接输出图像的路径out_image_path = f'{sub_title}/{each_idx}.jpg'if os.path.isfile(out_image_path):print('目标图像已下载,跳过')continue# 下载目标图像im_req = requests.get(url=image_url, headers=headers)if im_req.status_code != 200:print('下载失败,跳过')continueelse:print('下载成功')open(out_image_path, 'wb').write(im_req.content)# 避免服务器过载        time.sleep(2)# 关闭评论文件info_file.close()

效果演示

终端输出
在这里插入图片描述
文件夹视图
在这里插入图片描述
内容+评论
在这里插入图片描述

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...