第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

 

crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址

有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息

我们以百度新闻为列:

 

1、分析网站

首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息

 

然后查看源码,看看在源码里是否有这条新闻,可以看到源文件里没有这条信息,这种情况爬虫是无法爬取到信息的

 

那么我们就需要抓包分析了,启动抓包软件和抓包浏览器,前后有说过软件了,就不在说了,此时我们经过抓包看到这条信息是通过Ajax动态生成的JSON数据,也就是说,当html页面加载完成后才生成的,所有我们在源文件里无法找到,当然爬虫也找不到

 

我们首先将这个JSON数据网址拿出来,到浏览器看看,我们需要的数据是不是全部在里面,此时我们看到这次请求里只有 17条信息,显然我们需要的信息不是完全在里面,还得继续看看其他js包

 

我们将抓包浏览器滚动条拉到底,以便触发所有js请求,然后在继续找js包,我们将所有js包都找完了再没看到新闻信息的包了

 

那信息就不在js包里了,我们回头在看看其他类型的请求,此时我们看到很多get请求响应的是我们需要的新闻信息,说明只有第一次那个Ajax请求返回的JSON数据,后面的Ajax请求返回的都是html类型的字符串数据,

 

我们将Ajax请求返回的JSON数据的网址和Ajax请求返回html类型的字符串数据网址,拿来做一下比较看看是否能找到一定规律,

此时我们可以看到,JSON数据的网址和html类型的字符串数据网址是一个请求地址,

只是请求时传递的参数不一样而已,那么说明无论返回的什么类型的数据,都是在一个请求地址处理的,只是根据不同的传参返回不同类型的数据而已

http://news.baidu.com/widget?id=LocalNews&ajax=json&t=1501348444467   JSON数据的网址http://news.baidu.com/widget?id=civilnews&t=1501348728134        html类型的字符串数据网址http://news.baidu.com/widget?id=InternationalNews&t=1501348728196    html类型的字符串数据网址

 

我们可以将html类型的字符串数据网址加上JSON数据的网址参数,那是否会返回JSON数据类型?试一试,果然成功了

http://news.baidu.com/widget?id=civilnews&ajax=json        将html类型的字符串数据网址加上JSON数据的网址参数http://news.baidu.com/widget?id=InternationalNews&ajax=json    将html类型的字符串数据网址加上JSON数据的网址参数

 

这下就好办了,找到所有的html类型的字符串数据网址,按照上面的方法将其转换成JSON数据的网址,然后循环的去访问转换后的JSON数据的网址,就可以拿到所有新闻的url地址了

 

crapy实现

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
import re
import json
from adc.items import AdcItem
from scrapy.selector import Selectorclass PachSpider(scrapy.Spider):                            #定义爬虫类,必须继承scrapy.Spidername = 'pach'                                           #设置爬虫名称allowed_domains = ['news.baidu.com']                    #爬取域名start_urls = ['http://news.baidu.com/widget?id=civilnews&ajax=json']qishiurl = [                    #的到所有页面id'InternationalNews','FinanceNews','EnterNews','SportNews','AutoNews','HouseNews','InternetNews','InternetPlusNews','TechNews','EduNews','GameNews','DiscoveryNews','HealthNews','LadyNews','SocialNews','MilitaryNews','PicWall']urllieb = []for i in range(0,len(qishiurl)):            #构造出所有idURLkaishi_url = 'http://news.baidu.com/widget?id=' + qishiurl[i] + '&ajax=json'urllieb.append(kaishi_url)# print(urllieb)def parse(self, response):                  #选项所有连接for j in range(0, len(self.urllieb)):a = '正在处理第%s个栏目:url地址是:%s' % (j, self.urllieb[j])yield scrapy.Request(url=self.urllieb[j], callback=self.enxt)     #每次循环到的url 添加爬虫def enxt(self, response):neir = response.body.decode("utf-8")pat2 = '"m_url":"(.*?)"'url = re.compile(pat2, re.S).findall(neir)      #通过正则获取爬取页面 的URLfor k in range(0,len(url)):zf_url = url[k]url_zf = re.sub("\\\/", "/", zf_url)pduan = url_zf.find('http://')if pduan == 0:print(url_zf)                       #输出获取到的所有url

 

转载于:https://www.cnblogs.com/adc8868/p/7258095.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BEM思想之彻底弄清BEM语法

BEM的意思就是块(block)、元素(element)、修饰符(modifier),是由Yandex团队提出的一种前端命名方法论。这种巧妙的命名方法让你的CSS类对其他开发者来说更加透明而且更有意义。BEM命名约定更加严格&#xf…

Hibernate Search 4.2最终发布:支持空间查询

JBoss已宣布发布Hibernate Search 4.2 final。 您可以从Sourceforge下载它或使用Maven构件 。 在新版本中,包含了一些有趣的功能: Hibernate Search现在支持空间查询 。 使用Spatial扩展,您可以将全文查询与基于到空间点的距离的限制结合起…

推荐算法

5类系统推荐算法,非常好使,非常全 今日头条用了哪五种推荐算法 视频 今日头条核心技术“个性推荐算法”揭秘转载于:https://www.cnblogs.com/lhuser/p/8306092.html

python的应用包括哪些_Python应用领域有哪些?

1、数据分析与处理通常情况下,Python被用来做数据分析。用C设计一些底层的算法进行封装,然后用Python进行调用。因为算法模块较为固定,所以用Python直接进行调用,方便且灵活,可以根据数据分析与统计的需要灵活使用。Py…

win10系统同时安装python2和python3

1、官网下载python2和python3版本 2、安装python3,勾上Add Python3.5 to PATH,自定义选择安装目录,安装,验证:WINR--->cmd,输入python看看是否安装python3 3、安装python2,自定义安装目录&am…

使用NoSQLUnit测试Spring Data MongoDB应用程序

Spring Data MongoDB是Spring Data项目中的项目,它提供了Spring编程模型的扩展,用于编写使用MongoDB作为数据库的应用程序。 要使用NoSQLUnit为Spring Data MongoDB应用程序编写测试,除了考虑Spring Data MongoDB使用一个名为_class的特殊属…

20170117小测

今天再次迎来了我们的例行考试。 T1: 首先我们考虑那些点是可以共存的,我们可以枚举一个质数做他们的gcd,然后把这些点放在一张图里求直径。所以我们要做的就是把这些点的值分解质因数,对每个质因数挂一个链,代表有那些…

java实现红包要多少钱_java实现红包的分配算法

个人推测,微信红包在发出的时候已经分配好金额。比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额。而不是在领取的时候才计算的。下面贴出实现方法:publ…

iOS中Safari浏览器select下拉列表文字太长被截断的处理方法

网页中的select下拉列表&#xff0c;文字太长的话在iOS的Safari浏览器里会被自动截断&#xff0c;显示成下面这种&#xff1a; 安卓版的浏览器则没有这个问题。 如何让下拉列表中的文字在iOS的Safari浏览器里显示完整呢&#xff1f;答案是使用<optgroup></optgroup>…

HDU1042 N!(大整数类应用)

Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!InputOne N in one line, process to the end of file.OutputFor each N, output N! in one line.Sample Input123Sample Output126Code&#xff1a;#include <iostream> #includ…

Java内部具有原子更新的动态热交换环境

有人可能会说上述标题可以简称为OSGi &#xff0c;我想在一开始就放弃这种思考过程。 对于OSGi而言&#xff0c;这不是一个冒犯&#xff0c;这是一个很棒的规范&#xff0c;在实现层或可用性层上都弄得一团糟&#xff0c;这就是我对OSGi的信念。 当然&#xff0c;您可以使用OS…

Css Secret 案例Demo全套

Css Secret 案例全套 github地址 案例地址 去年买了一本CSS揭秘的css专题书&#xff0c;该书揭示了 47 个鲜为人知的 CSS 技巧&#xff0c;主要内容包括背景与边框、形状、 视觉效果、字体排印、用户体验、结构与布局、过渡与动画等。去年买入时&#xff0c;就决定将里面所有…

底量超顶量超级大黑马指标源码_底量超顶量+地量买点_月线底量超顶量大牛股,底量超顶量超级大黑马,底量超顶量买入指标,后量超前量买入指标_指标公式分享交流论坛_理想论坛 - 股票论坛...

l 图形特征&#xff1a;(1) 当股价从头部滑落一段时间后&#xff0c;会有一个见底回升的过程。(2) 这个头部区间的成交量称为顶量&#xff0c;见底回升时的成交量称为底量。(3) 如果底量能大大地超过顶量&#xff0c;则较容易通过顶量造成的压力带。…

php var_export与var_dump 输出的不同

问题发现在跟踪yratings_get_targets的时候&#xff0c;error_log(var_export(yblog_mspconfiginit("ratings"),true));老是打印出yblog_mspconfiginit(“ratings”)的返回是NULL 导致我以为是无法建立和DB的连接&#xff0c;走错路了一天。最后才发现&#xff0c;这…

Servlet 开发

1. Servlet &#xff08;很久远的东西&#xff0c;但是现在学习原理&#xff09; html css js 前端页面&#xff08;静态的&#xff09; form action ".html" Servlet 允许将action属性设置为映射&#xff0c;通过映射找到相关的Servlet class 进行数据的处理。…

JAX-RS Bean验证错误消息国际化

Bean验证简介 JavaBeans验证&#xff08;Bean验证&#xff09;是一种新的验证模型&#xff0c;可作为Java EE 6平台的一部分使用。 约束条件支持Bean验证模型&#xff0c;该约束以注释的形式出现在JavaBeans组件&#xff08;例如托管Bean&#xff09;的字段&#xff0c;方法或类…

CentOS 7 Flannel的安装与配置

1. 安装前的准备 etcd 3.2.9 Docker 17.12.0-ce 三台机器10.100.97.236, 10.100.97.92, 10.100.97.81 etcd不同版本之间的差别还是挺大的&#xff0c;使用V3版本跟Flannel整合起来会有坑&#xff0c;下文详解。 2. 安装 sudo yum install -y flannel 安装后&#xff0c;版本是0…

给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...

不多说&#xff0c;直接上干货&#xff01; Impala和Hive的关系&#xff08;详解&#xff09; 扩展博客 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤&#xff08;图文详解&#xff09; 参考 hortonworks ambari集成impala ambari hdp 集成 imp…

python调用ffmpeg合并_用ffmpeg命令处理mp4剪切与合并

1. 剪切&#xff1a;./ffmpeg -ss 00:00:06 -t 00:00:12 -i input.mp4 -vcodec copy -acodec copy output.mp4意思是从截取从6秒开始&#xff0c;时长为12秒的视频&#xff0c;格式不变&#xff0c;输入为input.mp4输出为output.mp4-vcodec copy -acodec copy : 编码格式不变2.…

html中常见的小问题(1)

问题&#xff1a;自适应高度的块级元素内添加图片后&#xff0c;其高度会比图片高度多出一块 简单代码如下&#xff1a; <!doctype html> <html><head><style>.box{width:533px;margin:100px auto;border:1px solid red;}</style></head>…