java爬虫抓取动态网页(Python爬虫实战入门五:获取JS动态内容—爬取今日头条)
优采云 发布时间: 2022-02-22 03:24java爬虫抓取动态网页(Python爬虫实战入门五:获取JS动态内容—爬取今日头条)
不管你是失业还是失业,在这个被互联网包围的时代,如果选择python动态爬虫,你就会多一技能,还怕找不到工作?,怕找不到工作?小编会告诉你这个专业的优势在哪里: Python爬虫实战入门五:获取JS动态内容——抓取今日头条,python爬虫入门实战(四)!爬取动态加载页面!,超棒!A Python爬虫学习的完整路线推荐??
1.Python爬虫实战入门五:获取JS动态内容——抢今日头条
我们之前爬取的大部分网页都是从 HTML 静态生成的内容,而我们看到的数据和内容可以直接从 HTML 源代码中找到。然而,并不是所有的网页都是这样的。网站的部分内容是由前端JS动态生成的。由于网页上显示的内容是JS生成的,所以我们在浏览器上可以看到,但是在HTML源代码中是找不到的。比如今日头条:浏览器呈现的网页是这样的:查看源码,但是是这样的:在HTML源码中找不到网页的新闻,都是动态生成加载的由 JS。在这种情况下,我们应该如何抓取网页呢?有两种方法:1、从网页响应中查找JS脚本返回的JSON数据;2、 使用 Selenium 模拟对网页的访问。这里只介绍第一种方法。关于 Selenium 的使用,后面有一个专门的。一、从网页响应中找到JS脚本返回的JSON数据即使网页内容是JS动态生成加载的,JS也需要调用一个接口,然后根据返回的JSON数据加载渲染通过界面。所以我们可以找到JS调用的数据接口,从数据接口中找到网页中最后渲染的数据。以今日头条为例进行演示:1、打开网页调试工具,在找到JS请求的数据界面F12中选择“网络”选项卡,发现有很多响应。让我们过滤并仅查看 XHR 响应。
现在你大概明白如何找到 JS 请求的接口了吧?但是我们刚才没有找到我们想要的新闻,我们再找一下:有一个焦点,我们点一下看看:首页图片新闻呈现的数据是一样的,所以数据应该有. 查看其他链接:这应该是热搜关键词这是图片新闻下的新闻。我们打开一个接口链接看看:coding:utf-8import requestsimport jsonurl = 'wbdata = requests.get(url).textdata = json.loads(wbdata)news = data['data']['pc_feed_focus']for n in news:title = n['title']img_url = n['image_url']url = n['media_url']print(url,title,img_url) 返回结果如下: 按照惯例,稍微解释一下代码:代码分为四部分,第一部分:相关库的介绍# 编码:utf-8import requestsimport json 第二部分:http请求到数据接口 url = 'wbdata = requests.get(url).text 第三部分:HTTP响应的数据JSONize和index到新闻数据的位置 data = json.loads(wbdata)news = data['data']['pc_feed_focus']第四部分:遍历并提取news中n的索引JSON数据:title = n['title'] img_url = n['image_url']url = n['media_url']print(url,title, img_url) 完成从JS网页抓取数据。==============================微信公众号:周先生第一次个人发布网站:同步更新 get(url).text 第三部分:将HTTP响应的数据JSONize并索引到新闻数据的位置 data = json.loads(wbdata)news = data['data']['pc_feed_focus']第四部分:遍历并提取news中n的索引JSON数据: title = n['title']img_url = n['image_url']url = n['media_url']print(url,title, img_url) 完成数据的爬取JS 网页。==============================微信公众号:周先生第一次个人发布网站:同步更新 get(url).text 第三部分:将HTTP响应的数据JSONize并索引到新闻数据的位置 data = json.loads(wbdata)news = data['data']['pc_feed_focus']第四部分:遍历并提取news中n的索引JSON数据: title = n['title']img_url = n['image_url']url = n['media_url']print(url,title, img_url) 完成数据的爬取JS 网页。==============================微信公众号:周先生第一次个人发布网站:同步更新 media_url']print(url,title,img_url) 完成从JS网页抓取数据。==============================微信公众号:周先生第一次个人发布网站:同步更新 media_url']print(url,title,img_url) 完成从JS网页抓取数据。==============================微信公众号:周先生第一次个人发布网站:同步更新
2.python爬虫实战介绍(四)!爬取动态加载的页面!
今天的主题是分享爬取动态网页的经验,以cocos论坛为例进行分享。(官方不会打我)为什么配置环境选择cocos论坛?因为我在浏览论坛的时候发现标题内容会随着滚动条的位置动态添加。环境:python3 + 请求。还介绍了几个系统库。参考如下: import requests import json import csv from .dummy import Pool 分析网页以chrome浏览器为例,在空白处右键->勾选进入网页分析模式,在Network中选择XHR,滚动向下滚动条,观察右边加载了什么文件。在网页分享模式下,点击刚刚下载的文件即可查看内容,并发现GET方法是用于一个地址,传入页码的参数。看返回的内容是一个json字符串。这个 json 字符串有我们想要的内容。下面我们来看看如何使用requests发送参数并返回Json结果。headers = { 'Accept': '/json' } url=f' html=requests.get(url,headers=headers); 如果 html.status_code == 200:html_bytes = html.content;html_str = html_bytes.decode() ; 只是根据地址,传入一个header告诉网页我们要接收一个json字符串。headers = { 'Accept': '/json' } url=f' html=requests.get(url,headers=headers); 如果 html.status_code == 200:html_bytes = html.content;html_str = html_bytes.decode() ; 只是根据地址,传入一个header告诉网页我们要接收一个json字符串。headers = { 'Accept': '/json' } url=f' html=requests.get(url,headers=headers); 如果 html.status_code == 200:html_bytes = html.content;html_str = html_bytes.decode() ; 只是根据地址,传入一个header告诉网页我们要接收一个json字符串。
解析jsonjson是一种可以被多种语言解析的数据存储格式,一般用于数据传输。从上图可以看出,所有的文章列表都在topic_list的topic中,我们看看python3是如何解析的。数据 = json.loads(html_str); all_items=data['topic_list']['topics'] write_content=[]; 对于所有项目中的项目:slug = item['slug'];item_id = item['id']link = f'title = item['title'];like_count = item['like_count'];like_count = item['like_count '];posts_count = item['posts_count'];views = item['views'];created_at = item['created_at'];write_content.append({'title': 标题, 'link': 链接, 'like' :like_count, 'reply':posts_count, 'browse':views, '发帖时间': created_at} );打开几个论坛内容就可以找到链接地址,由slug和id这两个字段拼接而成。
最后使用多线程和 csv 来存储结果。(不确定可以看之前的文章。白鱼无冰:Python爬虫实战(三)!xpath和csv!白鱼无冰:Python爬虫实战(二)!) 多线程爬虫!) pool = Pool(3); orign_num=[x for x in range(0,10)]; result = pool.map(scrapy,orign_num); with open('ccc_title_link .csv', 'w', newline='') as csvfile:= ('title', 'link', 'like', 'reply', 'browse', 'post time')writer = csv .(csvfile , =)writer.()for write_content in result:for _content in write_content:writer.writerow(_content);最后我们来看看最终效果!总结 对于动态生成的内容,我们可以在网页分享中分析下载的文件, 并通过requests模块模拟headers和发送参数来获取数据。这是我学到的新技能!如果您有任何错误或其他想法,请留言!如果我学到了新东西,我会尽快与你分享。点击关注,不要迷路!以上内容仅供个人学习使用,请勿用于商业用途。我是白玉无冰,游戏开发小红人,也玩python和shell注意!Cocos中文论坛域名修改!动态爬取论坛列表!Python爬虫入门实战(四)! 我会尽快与您分享。点击关注,不要迷路!以上内容仅供个人学习使用,请勿用于商业用途。我是白玉无冰,游戏开发小红人,也玩python和shell注意!Cocos中文论坛域名修改!动态爬取论坛列表!Python爬虫入门实战(四)! 我会尽快与您分享。点击关注,不要迷路!以上内容仅供个人学习使用,请勿用于商业用途。我是白玉无冰,游戏开发小红人,也玩python和shell注意!Cocos中文论坛域名修改!动态爬取论坛列表!Python爬虫入门实战(四)!
3.太棒了!Python爬虫学习的完整路线推荐
数据是决策的原材料。高质量的数据很有价值。如何挖掘原材料成为互联网时代的先行者,掌握信息来源,可以比别人快一步。大数据时代,互联网成为海量信息的载体。机械复制和粘贴不再实用。它不仅费时费力,而且容易出错。这时,爬虫的出现解放了大家的双手,以其高速爬行和定向抓取资源的能力得到了大家的青睐。爬虫越来越流行,不仅因为它能够快速爬取海量数据,还因为python等易于使用的语言,使得爬虫可以快速上手。对于小白来说,爬取可能是一件很复杂的事情,技术门槛很高,但掌握正确的方法其实很容易,能够在短时间内爬取主流的网站数据。但建议你从一开始就有一个特定的目标。以目标为驱动,您的学习将更加准确和高效。所有你认为必要的必备知识,都可以在完成目标的过程中学习。基于python爬虫,我们组织了一个完整的学习框架:筛选和筛选要学什么知识,从哪里获取资源是很多初学者面临的常见问题。接下来,我们将拆解学习框架,详细介绍各个部分,并推荐一些相关资源,告诉大家该学什么,怎么学,在哪里学。爬虫简介 爬虫是一种程序或脚本,它按照一定的规则自动从万维网上爬取信息。这个定义看起来很生硬,我们改成更好理解的解释:我们作为用户获取网络数据的方式是向浏览器提交请求->下载网页代码->解析/渲染成页面;而爬虫的方式是模拟浏览服务器发送请求 -> 下载网页代码 -> 只提取有用的数据 -> 将其存储在数据库或文件中。我们作为用户获取网络数据的方式是向浏览器提交请求->下载网页代码->解析/渲染成页面;而爬虫的方式是模拟浏览服务器发送请求 -> 下载网页代码 -> 只提取有用的数据 -> 将其存储在数据库或文件中。我们作为用户获取网络数据的方式是向浏览器提交请求->下载网页代码->解析/渲染成页面;而爬虫的方式是模拟浏览服务器发送请求 -> 下载网页代码 -> 只提取有用的数据 -> 将其存储在数据库或文件中。
爬虫和我们的区别在于,爬虫程序只提取网页代码中对我们有用的数据,爬虫爬取速度快,量级大。随着数据规模的扩大,爬虫获取数据的高效性能越来越突出,可以做的事情也越来越多: 市场分析:电商分析、商圈分析、一二级市场分析等。市场监控:电商、新闻、房产监控等商机发现:竞价情报发现、*敏*感*词*发现、企业客户发现等。爬虫学习首先要了解网页。那些我们肉眼能看到的亮丽漂亮的网页,都是由 HTML、css 等网页源代码组成的。支持的。这些源代码被浏览器识别并转换成我们看到的网页。这些源代码中肯定有很多规则,我们的爬虫可以根据这些规则抓取需要的信息。没有规则,也没有圈子。Robots 协议是爬虫中的规则。它告诉爬虫和搜索引擎哪些页面可以爬取,哪些页面不能爬取。通常在 网站 的根目录中有一个名为 robots.txt 的文本文件。轻量级爬虫“获取数据-解析数据-存储数据”是爬虫的三部曲。大多数爬虫都遵循这个过程,实际上是模拟了使用浏览器获取网页信息的过程。1、获取数据爬虫的第一步是模拟浏览器向服务器发送请求。基于python,
Python自带的标准库urllib2用的比较多。它是python内置的HTTP请求库。如果你只做基本的爬取网页,那么 urllib2 就足够了。Requests 的口号是“Requests 是唯一一个适用于 Python 的非转基因 HTTP 库,对它来说是安全的”。与 urllib2 相比,requests 使用起来确实简单得多,并且附带了一个 json 解析器。如果需要爬取异步加载的动态网站,可以学习浏览器抓包分析真实请求或学习Selenium自动化。当然对于爬虫来说,只要能爬取数据,越快越好。显然,传统的同步代码无法满足我们对速度的需求。(ps:据国外统计:正常情况下,如果我们请求同一个页面100次,至少需要30秒,但是如果我们对同一个页面使用异步请求100次,大约只需要3秒。)aiohttp是你值得拥有的一个库,aiohttp的异步操作在async的帮助下变得更加简洁,结构更加清晰/await 关键字。使用异步请求库进行数据抓取时,效率会大大提高。可以根据自己的需要选择合适的请求库,但建议从python自带的urllib入手。当然,您可以在学习的同时尝试所有方法以更好地了解这些库的使用。在 async/await 关键字的帮助下,aiohttp 的异步操作变得更加简洁,结构更加清晰。使用异步请求库进行数据抓取时,效率会大大提高。可以根据自己的需要选择合适的请求库,但建议从python自带的urllib入手。当然,您可以在学习的同时尝试所有方法以更好地了解这些库的使用。在 async/await 关键字的帮助下,aiohttp 的异步操作变得更加简洁,结构更加清晰。使用异步请求库进行数据抓取时,效率会大大提高。可以根据自己的需要选择合适的请求库,但建议从python自带的urllib入手。当然,您可以在学习的同时尝试所有方法以更好地了解这些库的使用。
推荐的请求库资源:urllib2 document::, JSON, XML 等格式。使用解析库相当于在HTML中查找需要的信息时使用正则表达式,可以更快速的定位到具体的元素,获取相应的信息。CSS 选择器是一种快速定位元素的方法。Pyqurrey 使用 lxml 解析器对 xml 和 html 文档进行快速操作。它提供了类似于 jQuery 的语法来解析 HTML 文档,支持 CSS 选择器,使用起来非常方便。Beautiful Soup 是一个借助网页结构和属性解析网页的工具,可以自动转换代码。它支持 Python 标准库中的 HTML 解析器,以及一些第三方解析器。Xpath 最初用于搜索 XML 文档,但它也适用于搜索 HTML 文档。它提供了 100 多个内置函数。这些函数用于字符串值、数值、日期和时间比较、节点和QName处理、序列处理、逻辑值等,XQuery和XPointer都是建立在XPath的基础上的。Re 正则表达式通常用于检索和替换匹配某个模式(规则)的文本。个人觉得前端基础比较扎实。使用 pyquery 是最方便最好的。re的速度比较快,但是写正则表达式比较麻烦。当然,既然用的是python,那最好还是自己用。逻辑值等,XQuery 和 XPointer 都是建立在 XPath 的基础上的。Re 正则表达式通常用于检索和替换匹配某个模式(规则)的文本。个人觉得前端基础比较扎实。使用 pyquery 是最方便最好的。re的速度比较快,但是写正则表达式比较麻烦。当然,既然用的是python,那最好还是自己用。逻辑值等,XQuery 和 XPointer 都是建立在 XPath 的基础上的。Re 正则表达式通常用于检索和替换匹配某个模式(规则)的文本。个人觉得前端基础比较扎实。使用 pyquery 是最方便最好的。re的速度比较快,但是写正则表达式比较麻烦。当然,既然用的是python,那最好还是自己用。
推荐解析器资源:pyquery作为关系型数据库的代表,系统比较成熟,成熟度很高,可以很好的存储一些数据,但是在处理海量数据时效率会明显变慢,已经不能令人满意了。某些大数据处理要求。MongoDB 已经流行了很长时间。与 MySQL 相比,MongoDB 可以方便你存储一些非结构化的数据,比如各种评论的文本、图片的链接等。你也可以使用 PyMongo 更方便地在 Python 中操作 MongoDB。因为这里用到的数据库知识其实很简单,主要是如何存储和提取数据,需要的时候学。Redis 是一个不折不扣的内存数据库。Redis支持丰富的数据结构,包括hash、set、list等。所有数据都存储在内存中,访问速度快,可以存储大量数据。一般用于分布式爬虫的数据存储。推荐的数据库资源:mysql文档和redis文档选择器可以轻松解析响应,但最让人惊喜的是它的超高性能,让你对爬虫进行工程化和模块化。学习scrapy,可以自己搭建一些爬虫框架,基本具备爬虫工程师的思维。最后,Pyspider作为国内大神们开发的框架,满足了大部分Python爬虫的需求——定向爬取和结构化分析。mysql 文档和redis 文档选择器可以轻松解析响应,但最让人惊喜的是它的超高性能,可以让你对爬虫进行工程化和模块化。学习scrapy,可以自己搭建一些爬虫框架,基本具备爬虫工程师的思维。最后,Pyspider作为国内大神们开发的框架,满足了大部分Python爬虫的需求——定向爬取和结构化分析。mysql 文档和redis 文档选择器可以轻松解析响应,但最让人惊喜的是它的超高性能,可以让你对爬虫进行工程化和模块化。学习scrapy,可以自己搭建一些爬虫框架,基本具备爬虫工程师的思维。最后,Pyspider作为国内大神们开发的框架,满足了大部分Python爬虫的需求——定向爬取和结构化分析。
可以在浏览器界面进行脚本编写、函数调度和爬取结果的实时查看,后端使用常用数据库存储爬取结果。它足够强大,更像是一个产品而不是一个框架。这是三个最具代表性的爬虫框架。它们都有远超其他的优势,比如Nutch的自然搜索引擎解决方案,Pyspider的产品级WebUI,以及Scrapy最灵活的定制化爬虫。推荐学习最接近爬虫本质的框架scarry,然后接触为搜索引擎而生的人性化Pyspider和Nutch。推荐爬虫框架资源:Nutch 文档 可怕文档 pyspider 文档爬取基础数据没问题,你也可以用框架来面对写更复杂的数据,这时候就算遇到反爬,你也已经掌握了一些反反爬的技巧。你的瓶颈将是爬取海量数据的效率。这个时候,相信大家自然会接触到一个很厉害的名字:分布式爬虫。分布式的东西听起来很吓人,但实际上它是利用多线程的原理,将多个主机组合起来,共同完成一个爬取任务。你需要掌握 Scrapy + Redis + MQ + Celery 的工具。之前我们说过,Scrapy是用来做基础页面爬取的,Redis是用来存放待爬取网页的队列,也就是任务队列。Scarpy-redis是scrapy中用来实现分布式组件的组件,
在高并发环境中,请求经常因为没有时间进行同步处理而被阻塞。通过使用消息队列MQ,我们可以异步处理请求,从而减轻系统压力。RabbitMQ 本身支持多种协议:AMQP、XMPP、SMTP、STOMP,使其非常重量级,更适合企业级开发。Scrapy-rabbitmq-link 是一个组件,它允许您从 RabbitMQ 消息队列中获取 URL 并将它们分发给 Scrapy 蜘蛛。Celery 是一个简单、灵活、可靠的分布式系统,用于处理大量消息。它支持RabbitMQ、Redis甚至其他数据库系统作为其消息代理中间件,在异步任务、任务调度、定时任务、分布式调度等场景中表现出色。所以分布式爬虫听起来很吓人,但就是这样。当你能写出分布式爬虫的时候,就可以尝试搭建一些基本的爬虫架构,实现一些更自动化的数据获取。推荐的分布式资源:scrapy-redis 文档
拿大数据说话,优势一目了然,从事IT行业,打开IT行业新大门,找到适合自己的培训机构,进行专业、系统的学习。