爬虫毕设(三):爬取动态网页

在爬取动态网页时,遇到数据无法直接提取的问题。通过分析网络请求,发现网页通过Ajax加载数据。找到包含目标数据的Json请求,成功爬取并解析数据,实现动态网页的数据获取。
摘要由CSDN通过智能技术生成

动态网页分析

按照上一篇的分析,直接使用XPath找到该标签,然后通过parse提取出数据,在写入到item中就完事了。但是,当信心满满的写完代码后却发现,控制台输入了一个简简单单的[]
正常
小问号你是否有很多朋友。
小朋友,你是否有很多问号
一顿操作猛如虎,一看输出数据无。那么这到底是怎么回事呢?我们从头开始分析。

打开NetWork,找到tv/,点开Preview,结果发现只有一个框架,内容却是空白的。

这是由于网页执行js代码,通过Ajax请求数据来重新渲染页面的。所以我们需要找到有数据的那一个请求,然后再对该请求的目标url爬取。
在这里插入图片描述
可以在preview中看到这就是我们想要的数据。
异步请求数据
我们再找到该请求的header,找到Request URL。
真正的目标url
我们直接复制链接到地址栏中,看到我们想要的数据,这熟悉的格式,不就是json吗。
在这里插入图片描述
动手撸代码,爬取这个网页,处理json数据,拿到自己想要的数据。

class tvSpider(scrapy.Spider):
    name = "douban_tv"
    allowed_domain = ["movie.douban.com"]

    def __init__(self, *args, **kwargs):
        super(tvSpider, self).__init__(*args, **kwargs)
        self.start_urls = ["https://movie.douban.com/j/search_subjects?type=tv&tag=热门&sort=recommend&page_limit=20&page_start=0"]

    def parse(self, response):
        results = json.loads(response.body)['subjects']
        for result in results:
            tv_item = TvListItem()
            url = result['url']

            tv_item['url'] = url.strip()
            print(url)

这次我们的思路是先拿到每部电视剧的url,然后再回调二次解析的函数获取详细信息。运行爬虫,可以看到我们已经得到了自己想要的结果。
爬接下在就迭代使用sc

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值