摘要:前言利用爬取的是今日头条中的街拍美图。详细浏览器信息获取文章链接相关代码街拍获取失败这里需要提一下模块的报错在对象上调用方法如果下载文件出错会抛出异常需要使用和语句将代码行包裹起来处理这一错误不让程序崩溃。
利用Python爬取的是今日头条中的街拍美图。废话不多说。
让我们愉快地开始吧~
Python版本: 3.6.4
相关模块:
requests模块;
re模块;
以及一些Python自带的模块。
安装Python并添加到环境变量,pip安装需要的相关模块即可。
获取文章链接相关代码:
import requestsimport jsonimport reheaders = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}def get_first_data(offset): params = { 'offset': offset, 'format': 'json', 'keyword': '街拍', 'autoload': 'true', 'count': '20', 'cur_tab': '1', 'from':'search_tab' } response = requests.get(url='https://www.toutiao.com/search_content/', headers=headers, params=params) try: response.raise_for_status() return response.text except Exception as exc: print("获取失败") return Nonedef handle_first_data(html): data = json.loads(html) if data and "data" in data.keys(): for item in data.get("data"): yield item.get("article_url")
这里需要提一下requests模块的报错,在response对象上调用 raise_for_status()方法,如果下载文件出错,会抛出异常,需要使用 try 和 except 语句将代码行包裹起来,处理这一错误,不让程序崩溃。
另外附上requests模块技术文档网址:http://cn.python-requests.org/zh_CN/latest/
获取图片链接相关代码:
def get_second_data(url): if url: try: reponse = requests.get(url, headers=headers) reponse.raise_for_status() return reponse.text except Exception as exc: print("进入链接发生错误") return Nonedef handle_second_data(html): if html: pattern = re.compile(r'gallery: JSON.parse/((.*?)/),', re.S) result = re.search(pattern, html) if result: imageurl = [] data = json.loads(json.loads(result.group(1))) if data and "sub_images" in data.keys(): sub_images = data.get("sub_images") images = [item.get('url') for item in sub_images] for image in images: imageurl.append(images) return imageurl else: print("have no result")
获取图片相关代码:
def download_image(imageUrl): for url in imageUrl: try: image = requests.get(url).content except: pass with open("images"+str(url[-10:])+".jpg", "wb") as ob: ob.write(image) ob.close() print(url[-10:] + "下载成功!" + url)def main(): html = get_first_data(0) for url in handle_first_data(html): html = get_second_data(url) if html: result = handle_second_data(html) if result: try: download_image(result) except KeyError: print("{0}存在问题,略过".format(result)) continueif __name__ == '__main__': main()
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/125564.html
摘要:上一篇文章网络爬虫实战数据爬取下一篇文章网络爬虫实战动态渲染页面抓取本节我们以今日头条为例来尝试通过分析请求来抓取网页数据的方法,我们这次要抓取的目标是今日头条的街拍美图,抓取完成之后将每组图片分文件夹下载到本地保存下来。 上一篇文章:Python3网络爬虫实战---35、 Ajax数据爬取下一篇文章:Python3网络爬虫实战---37、动态渲染页面抓取:Selenium 本节我们...
摘要:所以说,我们所看到的微博页面的真实数据并不是最原始的页面返回的,而是后来执行后再次向后台发送了请求,拿到数据后再进一步渲染出来的。结果提取仍然是拿微博为例,我们接下来用来模拟这些请求,把马云发过的微博爬取下来。 上一篇文章:Python3网络爬虫实战---34、数据存储:非关系型数据库存储:Redis下一篇文章:Python3网络爬虫实战---36、分析Ajax爬取今日头条街拍美图 ...
摘要:不过动态渲染的页面不止这一种。再有淘宝这种页面,它即使是获取的数据,但是其接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析来抓取。我们用一个实例来感受一下在这里们依然是先打开知乎页面,然后获取提问按钮这个节点,再将其 上一篇文章:Python3网络爬虫实战---36、分析Ajax爬取今日头条街拍美图下一篇文章:Python3网络爬虫实战---38、动态渲染页面抓取:Spla...
摘要:今天给大家分享的是爬虫,写得不好的大家多关照,指出背景交代,以下写的都是参照网络爬虫开发实战用实现的,所以的具体思路什么的,大家可以去看书上的介绍,感兴趣的,可以去了解一波。 今天给大家分享的是node爬虫,写得不好的大家多关照,指出 背景交代,以下写的demo都是参照《python3网络爬虫开发实战》用node实现的,所以demo的具体思路什么的,大家可以去看书上的介绍,感兴趣的,可...
摘要:前言利用实现抓取微博评论数据,废话不多说。让我们愉快地开始吧开发工具版本相关模块模块模块模块模块模块以及一些自带的模块。环境搭建安装并添加到环境变量,安装需要的相关模块即可。 ...
阅读 654·2023-04-25 19:43
阅读 3834·2021-11-30 14:52
阅读 3711·2021-11-30 14:52
阅读 3775·2021-11-29 11:00
阅读 3732·2021-11-29 11:00
阅读 3789·2021-11-29 11:00
阅读 3516·2021-11-29 11:00
阅读 5934·2021-11-29 11:00