PHP网站建设的基本流程,桂林网站建设,在线qq登录无需下载,龙岗网站建设icxun第三百三十四节#xff0c;web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻#xff0c;爬取Ajax动态生成的信息 crapy爬取百度新闻#xff0c;爬取Ajax动态生成的信息#xff0c;抓取百度新闻首页的新闻rul地址 有多网站#xff0c;当你浏览器访问时看到的信息#xf… 第三百三十四节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?idLocalNewsajaxjsont1501348444467 JSON数据的网址http://news.baidu.com/widget?idcivilnewst1501348728134 html类型的字符串数据网址http://news.baidu.com/widget?idInternationalNewst1501348728196 html类型的字符串数据网址 我们可以将html类型的字符串数据网址加上JSON数据的网址参数那是否会返回JSON数据类型试一试果然成功了 http://news.baidu.com/widget?idcivilnewsajaxjson 将html类型的字符串数据网址加上JSON数据的网址参数http://news.baidu.com/widget?idInternationalNewsajaxjson 将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?idcivilnewsajaxjson]qishiurl [ #的到所有页面idInternationalNews,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] ajaxjsonurllieb.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(urlself.urllieb[j], callbackself.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