概述
tips:打印字典中全部的键值:
for key in dict:
print(key)
众所周知,厉害一点的网页现在都采取ajax异步加载的形式在网页中加载数据了。也就是说,在get了网页的html后,可能根本找不到在浏览器中看到的内容。所以,我们需要调用chrome的调试台,去找到ajax异步加载目标数据的请求,解析后进行模拟访问,拿到自己想要的数据。
这里以爬取金逸电影首页的正在热映电影为例。
地址:http://www.jycinema.com/html/default/index.html
右键点击查看源代码,我们发现这里的H5页面几乎没有任何数据。那么好,F12打开调试台,在network中选取xhr,我们只查看xhr请求,一个个解析下去(看每一个请求返回的preview),我们就找到了拿取热映电影信息的请求。
我们选取header页面里的general—url,这就是我们的目标url。把header翻到最下面,我们就可以看到请求携带的Formdata:
有了这两个数据以后,我们就可以构建自己的爬虫了。这里以爬取电影名字为例。
细节就不讲了,重点还是重写start_request,构建Formrequest,然后拿到对应的response
直接放spider的源码
# -*- coding: utf-8 -*-
import scrapy
from todayMovie.items import TodaymovieItem
from scrapy import FormRequest
import json
class WuhanmoviespiderSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['jycinema.com']
def start_requests(self):
return [FormRequest(
"http://www.jycinema.com/frontUIWebapp/appserver/cinCinemaFilmViewService/findFilm",
formdata={'params': '{"status":"HOT","cityName":"上海市","type":"queryFilm","DBType":"mongoDB","channelCode":"J0002","channelId":"3"}'},
callback=self.parse,
dont_filter=True
)]
def parse(self, response):
item = TodaymovieItem()
db = response.text
db = json.loads(db)
for i in db['data']:
print(i['titlealt'])
item['name'] = i['titlealt']
yield item
写在最后:目前,这种携带Formdata的异步请求还是会处理的,但是在淘女郎的页面,有一种异步请求没有Formdata,只携带了大量的Query String Parameters,这类请求还不知道该怎么抓取,在这里留下一个问题。希望知道的同学可以在评论里留下分享。
最后
以上就是淡然月光为你收集整理的scrapy之爬取js异步加载的数据的全部内容,希望文章能够帮你解决scrapy之爬取js异步加载的数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复