学习,最重要的是要了解它,并且使用它,正所谓,学以致用、本文,我们将来介绍,BeautifulSoup模块的使用方法,以及注意点,帮助大家快速了解和学习BeautifulSoup模块。有兴趣了解爬虫的小伙伴们,赶快学起来吧。
在开始写之前,我们需要知道我们要做什么?做爬虫。
抓取什么?抓取网站图片。
在什么地方抓取?图片之家_图片大全_摄影图片为主的国内综合性图片网
大家可以用这个网站练练手,页面也是比较简单的。
我们知道我们需要抓取的是那一个网站数据,因此,我们要来分析一下网站是如何提供数据的。
根据分析之后,所有页面似乎都是相同的,那我们选择一个摄影图来为大家做演示。
进一步研究页面数据,每一个页面,下方都有一个列表,然后通过列表标题,进入到下一级中。那这个页面我们需要获取列表标题。
继续分析,点击链接进入之后,发现有已经有图片了列表,并且还可以翻页。
再点击继续研究,发现图片还有多张。
分析完成,我们来编写代码。
流程图如下:
导入我们需要使用到的所有模块。
import os
import re
from bs4 import BeautifulSoup
import requests
import time
def tupianzj():
"""获取标题,链接"""
response = requests.get(url="https://www.tupianzj.com/sheying/",headers=headers)
response.encoding="gbk"
Soup = BeautifulSoup(response.text, "html.parser")
list_title=Soup.find_all("h3",{"class":"list_title"})
list=[]
for i in list_title:
list.append({'name':i.get_text(),'url':i.find("a").get("href")})
return list
def tu_list(url,page):
"""获取类比列表"""
response = requests.get(url,headers=headers)
response.encoding="gbk"
Soup = BeautifulSoup(response.text, "html.parser")
list_title=Soup.find_all("ul",{"class":"list_con_box_ul"})[0].find_all("li")
for i in list_title:
for j in i.find_all("a"):
try:
j.find("img").get("src")
name=j.get("title")#列表列表图片名称
url1="https://www.tupianzj.com"+j.get("href")[0:-5]#类比列表图片详情链接
text=Soup.find_all("div",{"class":"pages"})[0].find_all("a")[1].get("href")#下一页
page1=Soup.find_all("span",{"class":"pageinfo"})[0].find("strong").get_text()#获取总页数
url2=url+text[0:-6]+page+".html"
print(url2,page1)
try:
os.mkdir(name)#创建文件
except:
pass
tu_detail(name,url1,2)
if page==1:
for z in range(2,int(page1))
tu_list(url2,page)
except:
pass
def tu_detail(path,url,page):
"""获取详情"""
if page<=2:
page=2
response = requests.get(url+"_"+str(page)+".html",headers=headers)
response.encoding="gbk"
Soup = BeautifulSoup(response.text, "html.parser")
img_url=Soup.find("img",id="bigpicimg").get("src")
with open(path+"\\"+str(int(time.time()*1000000))+".jpg","wb") as f:
img=requests.get(img_url,headers=headers).content
f.write(img)
text=Soup.find_all("div",{"class":"pages"})[0].find("a")
page1=re.findall(r"\d+",text.decode())[0]
if page==2:
for i in range(int(page)+1,int(page1)+1):
tu_detail(path,url,i)
else:
return
知识点总结
学会此文,可掌握知识点。
1、掌握BeautifulSoup
区分find,find_all的用法:find,查找第一个返回字符串,find_all 查找所有,返回列表
区分get,get_text的用法:get获取标签中的属性,get_text获取标签包围的文字。
2、掌握正则,re.findall 的使用
3、掌握字符串切片的方式 str[0,-5] 截取第一个文字,到倒数第5个文字。
4、掌握创建文件夹的方法os.mkdir(name)
5、掌握with open(f,w) as f:的用法
6、掌握requests模块的get请求方法。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有