摘要:根据帖子建立文件夹建立文件夹可以使用库的方法,注意,如果是方法则只能创建一层目录。最终代码运行效果
经过前两篇文章 http://segmentfault.com/a/1190000004288204 和 http://segmentfault.com/a/1190000004269037的测试,决定实现以下功能:
给定感兴趣的贴吧首页,自动获取帖子的链接
进入获取到的链接中,将帖子内的图片链接提取出来
按照帖子的ID建文件夹,将帖子内图片的链接下载为图片保存到文件夹中
实现过程:
获取帖子列表
以百度贴吧“壁纸吧”为例http://tieba.baidu.com/f?kw=%E5%A3%81%E7%BA%B8&ie=utf-8,通过分析该网页源代码,发现:
每一个帖子的链接都是
href="/p/xxxxxxxxxx"
再打开对应帖子的链接,发现该帖子正是
http://tieba.baidu.com/p/xxxxxxxxx
所以获取文章链接的思路很简单:
获取到标题的href这个属性的内容,前面加上http://tieba.baidu.com/就是最终的帖子链接:
LinkSelector = AirticleFilter.xpath("//div[@class="threadlist_lz clearfix"]/div/a/@href")
获取帖子中每个楼层所包含的图片链接:
这里会有一个坑,如果你直接从chrome中审查元素,定位到图片所在的xpath,有可能是获取不到真正的链接的,而有可能获取到“loading.gif”!这是因为,图片在加载时比较慢,网页先下载一个小的动画图片显示loading,待下载完成之后再显示真正的图片。不过好在在每一个包含图片的楼层中的头部信息中都包含了文件的类型,图片的大小,图片的链接地址,以及图片是否为用户上传的图片等信息:
经过摸索,我们要提取的是包含有的节点信息,该节点中有图片的实际链接src="http:XXXXXXXX"
BackGroundLink = BackGroundFilter.xpath("//div[@class="l_post l_post_bright j_l_post clearfix "]") ImgSrc = etree.HTML(reply_info["content"]["content"]) ImgLink = ImgSrc.xpath("//img[@class="BDE_Image"]/@src")
以上xpath首先获取到楼层,然后获取到楼层中的content信息,然后将content信息作为html文件再次分析,获取到包含class="BDE_Image"的图片的src。
根据帖子ID建立文件夹
建立文件夹可以使用os库的mkdirs方法,注意,如果是mkdir方法则只能创建一层目录。
def MakeDir(TargetDir,FolderName): new_path = os.path.join(TargetDir,FolderName) if(not os.path.isdir(new_path)): os.makedirs(new_path) os.chdir(new_path)
最终代码:
#-*-coding:utf8-*- from lxml import etree import SaveLinkIntoFile import requests import re import os import GetTiebaImg def GetArticleLinks(url): TiebaUrlprefix = "http://tieba.baidu.com" html = requests.get(url) html = re.sub(r"charset=(/w*)", "charset=UTF-8", html.text) AirticleFilter = etree.HTML(html) #print(html) LinkSelector = AirticleFilter.xpath("//div[@class="threadlist_lz clearfix"]/div/a/@href") for i in range(len(LinkSelector)): foldername = LinkSelector[i].strip().lstrip().rstrip("/").replace("/","") print(foldername) MakeDir("D:Python_Cache",foldername) LinkSelector[i] = TiebaUrlprefix + LinkSelector[i] GetTiebaImg.GetTiebaImg([LinkSelector[i]]) os.chdir("../") print(LinkSelector) return LinkSelector # print("the number of links:{0}".format(len(LinkSelector))) # for each in LinkSelector: # print("The links:{0}".format_map(each[0])) def MakeDir(TargetDir,FolderName): new_path = os.path.join(TargetDir,FolderName) if(not os.path.isdir(new_path)): os.makedirs(new_path) os.chdir(new_path) # print("the Current dir is:{0}".format(os.getcwd())) # os.chdir("../") # print("the Current dir is:{0}".format(os.getcwd())) if __name__ == "__main__": MakeDir("D:Python_Cache","Cache1") TiebaUrl = "http://tieba.baidu.com/f?kw=%E5%A3%81%E7%BA%B8&ie=utf-8" GetArticleLinks(TiebaUrl)
运行效果:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37727.html
摘要:背景介绍我大一的时候学校就开设了,但是并没有好好学,基本等于是什么也不会,最近才开始看,所以本身也是摸着石头过河,见谅心得讲真的,爬虫确实不像别人想象的那样简单,爬虫首先要静下心来,细心寻找目标网站的布局规律,最重要的是的变化,这是一个考验 背景介绍 我大一的时候学校就开设了 python,但是并没有好好学,基本等于是什么也不会,最近才开始看,所以本身也是摸着石头过河,见谅... 心得...
摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...
摘要:在上一篇文章的基础上增加获取百度贴吧的头像图片的功能,使用到的技术为,,具体实现如下查看网页源代码测试网页链接通过定位头像的的代码每一楼层的标签是从楼层开始,直到定位到照片顺序应该是提取信息通过一步步获取到这一层,提取到这个标签中的就可以获 在上一篇文章的基础上增加获取百度贴吧的头像图片的功能,使用到的技术为XPath,Requests,具体实现如下: 1. 查看网页源代码测试网页链接...
摘要:河北阳光理政投诉板块开始撸代码今天再次尝试使用一个新的模块,它可以配合快速解析文档,官网网站利用安装,如果安装失败,可以在搜索引擎多搜搜,内容很多,有解决方案。 1.河北阳光理政投诉板块-写在前面 之前几篇文章都是在写图片相关的爬虫,今天写个留言板爬出,为另一套数据分析案例的教程做做准备,作为一个河北人,遵纪守法,有事投诉是必备的技能,那么咱看看我们大河北人都因为什么投诉过呢? 今天要...
阅读 1124·2021-11-25 09:43
阅读 2941·2019-08-30 15:54
阅读 3263·2019-08-30 15:54
阅读 2955·2019-08-30 15:44
阅读 1606·2019-08-26 12:18
阅读 2236·2019-08-26 11:42
阅读 853·2019-08-26 11:35
阅读 3274·2019-08-23 18:22