数据爬虫python实例:IMDB网络爬虫-Sy-Python

import sy
from imdbse.items import MovieItem
cl MovieSpider(sy.Spider):
    name = 'movie'
    allowed_domains = ['imdb.com']
    start_urls = ['https://www.imdb.com/search/title?year=2017,2018&title_type=feature&sort=moviemeter,asc']
    def p(self, response):
        urls = response.css('h3.lister-item-header > a::attr(href)').extract()
        for url in urls:
            yield sy.Request(url=response.urljoin(url),callback=self.p_movie)
        nextpg = response.css('div.desc > a::attr(href)').extract_first()
        if nextpg:
            nextpg = response.urljoin(nextpg)
            yield sy.Request(url=nextpg,callback=self.p)
    def p_movie(self, response):
        item = MovieItem()
        item['title'] = self.getTitle(response)
        item['year'] = self.getYear(response)
        item['rating'] = self.getRating(response)
        item['genre'] = self.getGenre(response)
        item['director'] = self.getDirector(response)
        item['summary'] = self.getSummary(response)
        item['actors'] = self.getActors(response)
        yield item

我已经写了上面的代码,用于从 2017 年到目前为止刮擦所有 imdb 电影。但是这个代码只刮擦 100 电影。请帮助。

4

我相信问题出在

nextpg = response.css('div.desc > a::attr(href)').extract_first()

在此页面上https://www.imdb.com/search/title?year=2017,2018&title_type=feature&sort=moviemeter,asc

下一页链接的代码是这样的

<div cl="desc">
    <span cl="lister-current-first-item">1</span> to
    <span cl="lister-current-last-item">50</span> of 24,842 titles
    <span cl="ghost">|</span>
    <a href="?year=2017,2018&amp;title_type=feature&amp;sort=moviemeter,asc&amp;page=2&amp;ref_=adv_nxt" cl="lister-page-next next-page" ref-marker="adv_nxt">Next »</a>
</div>

您的代码获取带有锚文本的链接的 href Next & gt;& gt;

哪个是这个

https://www.imdb.com/search/title?year=2017,2018&title_type=feature&sort=moviemeter,asc&page=2&ref_=adv_nxt

你去那个页面,刮下接下来的 50 部电影

然而,带有类 desc 的 div 中的 html 中有两个链接。没有一个像第一页。

第一个链接是上一个链接,而不是下一个链接。

<div cl="desc">
    <span cl="lister-current-first-item">51</span> to
    <span cl="lister-current-last-item">100</span> of 24,842 titles
    <span cl="ghost">|</span> <a href="?year=2017,2018&amp;title_type=feature&amp;sort=moviemeter,asc&amp;page=1&amp;ref_=adv_prv" cl="lister-page-prev prev-page" ref-marker="adv_nxt">« Previous</a>
    <span cl="ghost">|</span> <a href="?year=2017,2018&amp;title_type=feature&amp;sort=moviemeter,asc&amp;page=3&amp;ref_=adv_nxt" cl="lister-page-next next-page" ref-marker="adv_nxt">Next »</a>
</div>

我会做的是设置一个计数器为 0。

成功刮擦的增量。

如果计数器大于 0,则抓住第二个链接并转到该链接并在该页面上刮擦结果

如果计数器不大于 0,则抓住第一个链接并转到该链接并在该页面上刮擦结果

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(747)
原神cdk:原线两侧的平行线(line parallel)
上一篇
D sur:BigSurmacOS11.2.1(20D74)正在从“APFS系统快照”运行-如何修复
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(82条)