也谈python爬虫

475次阅读
没有评论

现在讲述python网络爬虫的资料已经很多啦,由于项目的需求,需要收集人脸相关数据集,于是便考虑用爬虫来补充部分数据集,下面将结合尚街拍(https://www.jiepai.net/)网站的具体爬虫过程来对python requests 具体爬虫过程进行梳理总结。

1、首先对网站进行一个简单分析,结合目的本身,由于本需求重点关注的是人脸相关数据,所以选取网站上的明星穿衣子网页作为重点爬取对象(https://www.jiepai.net/dapei/mingxingchuanyi)

也谈python爬虫

2、分析该网页(https://www.jiepai.net/dapei/mingxingchuanyi),可以发现该网页是分页展示的,并且每一页都包含很多对象的素材,因此第一要务就是要获取所有的对象连接

本人爬取的时候,该网页已经有607页,该网站是再持续更新中。。。

python 爬虫

2.1、这个页码是可以通过解析获取的,具体操作如下:

打开网页,找到下面页码的位置,点击F12,并且右键点击页码位置,选择菜单栏中的“检查”选项。即可找到页码对应的HTML代码位置,进行解析,即可获得相关的html代码

也谈python爬虫

 在本文的操作中,直接对页码进行写死,循环607次

domain = “https://www.jiepai.net/dapei/mingxingchuanyi”

for page_number in range(607):     url = domain + “/” + “page” + “/” + str(page_number)     response = requests.get(url)

2.2、每一页有24个对象(title)

也谈python爬虫

 首先对网站的具体内容进行分析,打开网页后,并且点击F12后,选择右键菜单栏的检查,找到对应title(本操作选择的是第二个title)对应的html代码

也谈python爬虫

 分析这段代码,找到该title对应的连接为https://www.jiepai.net/373413.html,所以需要从整个HTML代码中解析<a href=”https://www.jiepai.net/373277.html”  rel=”nofollow” class=”thumb-link”>的内容。

也谈python爬虫

具体实现title网络连接的代码为:

title_url_pattern = re.compile(r”'<a  href=”(.*)” rel=”nofollow” class=”thumb-link”>”’)

list_find_res = title_url_pattern.findall(response.text)

3、对每个title连接进行解析,提取图片的连接(重点是对图片的爬取)

因为爬取图片的最终目的是进行图片处理,所以需要将每个title中所对应的人物名称(姓名)以及每张图片的网络连接进行解析出来。

3.1 每个title对应的人物名称的解析

打开title(https://www.jiepai.net/373413.html)分析人物名称出现的地方,并找到对应的html代码

python 爬虫

 考虑到每个网页的特征,多打开几个title进行对比分析,发现title人物对应的姓名的出现方式如下:

<a href=”https://www.jiepai.net/tag/wuxuanyi” title=”View all posts in 吴宣仪” target=”_blank” class=”tag_link”>吴宣仪</a>

因此可以用如下正则表达式来实现,代码如下:

user_pattern = re.compile(r”'<a.*?class=”tag_link”>(.*?)</a>”’)

user_find_res = user_pattern.findall(response.text)

3.2、解析每个title对应的图片连接

通过对title网页进行检查分析,发现图片连接的形式如下

python 爬虫

 所以正则表达式如下:

image_url_pattern = re.compile(r”’data-lazy-src=”(.*?)””’) image_find_res = image_url_pattern.findall(response.text)

依据上述两个步骤,即可得到每个title对应的人物名称以及对应的图片连接list(每个title对应多张图片)

但是在具体爬取调试的过程过程中,发现有部分title的展现方式有所改变,是以页面的显示来展示不同图片的

也谈python爬虫

3.3、于是需要对每个title页面进行子页面进行解析,如果存在多个子页面,则需要增加对每个子页面的图片解析,否则,则直接进行图片连接的解析,操作步骤与上面是一致的。

#<a href=”https://www.jiepai.net/373250.html/3″ class=”post-page-numbers”> page_url_pattern = re.compile(r”'<a href=”(.*?)” class=”post-page-numbers””’)

page_url = page_url_pattern.findall(response.text)

 4、通过上面三个步骤后,即可获得每个人物名称以及对应的图片连接(list)

4.1、建立每个人物对应的文件夹路径,并且要对文件夹路径进行存在与否判断,因为同一个人物可以对一个多个title,我们需要将同一个人物的图片保存到同一个文件夹目录下

root_path = “/virt/image_class/jiepai/image”

user_path = root_path + “/” + user_name

if not os.path.exists(user_path): os.makedirs(user_path)

 4.2、下载图片

依据上面获取的图片连接,以及人物名称,将对应的图片下载到相应的文件夹目录下(为避免重复,对图片名称进行判断,如果存在,则不进行下载)

def downImg(imgUrl, dirpath, imgName): filename = os.path.join(dirpath, imgName) if os.path.exists(filename): print(“the file is exists”) return False

try: res = requests.get(imgUrl, timeout=15) if str(res.status_code)[0] == “4”: #print(str(res.status_code), “:” , imgUrl) return False except Exception as e: #print(“抛出异常:”, imgUrl) #print(e) return False with open(filename, “wb”) as f: f.write(res.content) return True

5、总结:

整个爬虫过程可以描述为:

①,解析所有的title

②,依据每个title解析对应的人物名称以及图片连接(为后续下载保存图片做准备)

③,对每个人物对应的图片进行下载保存。

6、本项目是为人脸识别做准备的,所以后续需要依据人脸识别的相关需求对上述图片数据集进行清洗。

完整代码见:https://download.csdn.net/download/reset2021/20469535

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-25发表,共计2989字。
新手QQ群:570568346,欢迎进群讨论 Python51学习