50行Python代码爬取黑丝美眉高清图
一、技术路线
BeautifulSoup:解析html网页
re:正则表达式,提取html网页信息
os:保存文件
import reimport requestsimport osfrom bs4 import BeautifulSoup
二、获取网页信息
def getHtml(url): #固定格式,获取html内容headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} #模拟用户操作try:r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print('网络状态错误')




四、网页详情页链接获取
def getUrlList(url): # 获取图片链接url_list = [] #存储每张图片的url,用于后续内容爬取demo = getHtml(url)soup = BeautifulSoup(demo,'html.parser')sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作为锚,获取唯一的div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_nls = re.findall(r'a href="(.*?)" rel="external nofollow" rel="external nofollow" ', str(sp)) #用正则表达式提取链接for i in nls:if 'https' in i: #因所有无效链接中均含有'https'字符串,因此直接剔除无效链接(对应第3条的分析)continueurl_list.append('http://www.netbian.com' + i) #在获取的链接中添加前缀,形成完整的有效链接return url_list
五、依据图片链接保存图片
def fillPic(url,page):pic_url = getUrlList(url) #调用函数,获取当前页的所有图片详情页链接path = './美女' # 保存路径for p in range(len(pic_url)):pic = getHtml(pic_url[p])soup = BeautifulSoup(pic, 'html.parser')psoup = soup.find('div', class_="pic") #class_="pic"作为锚,获取唯一div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正则表达式获取详情图片链接,因为这里返回的是列表形式,所以取第一个元素(只有一个元素,就不用遍历的方式了)pic = requests.get(picUrl).content #打开图片链接,并以二进制形式返回(图片,声音,视频等要以二进制形式打开)image_name ='美女' + '第{}页'.format(page) + str(p+1) + '.jpg' #给图片预定名字image_path = path + '/' + image_name #定义图片保存的地址with open(image_path, 'wb') as f: #保存图片f.write(pic)print(image_name, '下载完毕!!!')
六、main()函数
www.netbian.com/meinv/
www.netbian.com/meinv/index…

def main():n = input('请输入要爬取的页数:')url = 'http://www.netbian.com/meinv/' # 资源的首页,可根据自己的需求查看不同分类,自定义改变目录,爬取相应资源if not os.path.exists('./美女'): # 如果不存在,创建文件目录os.mkdir('./美女/')page = 1fillPic(url, page) # 爬取第一页,因为第1页和后续页的链接的区别,单独处理第一页的爬取if int(n) >= 2: #爬取第2页之后的资源ls = list(range(2, 1 + int(n)))url = 'http://www.netbian.com/meinv/'for i in ls: #用遍历的方法对输入的需求爬取的页面做分别爬取处理page = str(i)url_page = 'http://www.netbian.com/meinv/'url_page += 'index_' + page + '.htm' #获取第2页后的每页的详情链接fillPic(url, page) #调用fillPic()函数
七、完整代码
import reimport requestsimport osfrom bs4 import BeautifulSoupdef getHtml(url): #固定格式,获取html内容headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} #模拟用户操作try:r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print('网络状态错误')def getUrlList(url): # 获取图片链接url_list = [] #存储每张图片的url,用于后续内容爬取demo = getHtml(url)soup = BeautifulSoup(demo,'html.parser')sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作为锚,获取唯一的div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_nls = re.findall(r'a href="(.*?)" rel="external nofollow" rel="external nofollow" ', str(sp)) #用正则表达式提取链接for i in nls:if 'https' in i: #因所有无效链接中均含有'https'字符串,因此直接剔除无效链接(对应第3条的分析)continueurl_list.append('http://www.netbian.com' + i) #在获取的链接中添加前缀,形成完整的有效链接return url_listdef fillPic(url,page):pic_url = getUrlList(url) #调用函数,获取当前页的所有图片详情页链接path = './美女' # 保存路径for p in range(len(pic_url)):pic = getHtml(pic_url[p])soup = BeautifulSoup(pic, 'html.parser')psoup = soup.find('div', class_="pic") #class_="pic"作为锚,获取唯一div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正则表达式获取详情图片链接,因为这里返回的是列表形式,所以取第一个元素(只有一个元素,就不用遍历的方式了)pic = requests.get(picUrl).content #打开图片链接,并以二进制形式返回(图片,声音,视频等要以二进制形式打开)image_name ='美女' + '第{}页'.format(page) + str(p+1) + '.jpg' #给图片预定名字image_path = path + '/' + image_name #定义图片保存的地址with open(image_path, 'wb') as f: #保存图片f.write(pic)print(image_name, '下载完毕!!!')def main():n = input('请输入要爬取的页数:')url = 'http://www.netbian.com/meinv/' # 资源的首页,可根据自己的需求查看不同分类,自定义改变目录,爬取相应资源if not os.path.exists('./美女'): # 如果不存在,创建文件目录os.mkdir('./美女/')page = 1fillPic(url, page) # 爬取第一页,因为第1页和后续页的链接的区别,单独处理第一页的爬取if int(n) >= 2: #爬取第2页之后的资源ls = list(range(2, 1 + int(n)))url = 'http://www.netbian.com/meinv/'for i in ls: #用遍历的方法对输入的需求爬取的页面做分别爬取处理page = str(i)url_page = 'http://www.netbian.com/meinv/'url_page += 'index_' + page + '.htm' #获取第2页后的每页的详情链接fillPic(url_page, page) #调用fillPic()函数main()
搜索下方加老师微信
老师微信号:XTUOL1988【切记备注:学习Python】
领取Python web开发,Python爬虫,Python数据分析,人工智能等精品学习课程。带你从零基础系统性的学好Python!
评论


