首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刮取:修改网页抓取规则

问刮取:修改网页抓取规则
EN

Stack Overflow用户
提问于 2014-03-09 23:37:55
回答 1查看 499关注 0票数 0

我已经开始在我的一个项目中使用刮除从一个网球网站上的数据。这里是我想要刮掉数据的示例页面。正如你所看到的,我想为一个网球运动员搜集数据。我需要递归浏览整个页面,并收集“匹配统计”(这是一个名为“匹配统计”的链接,旁边的每一场比赛)球员的比赛。我已经编写了代码来解析打开的匹配状态弹出的数据。我现在需要做的就是打开这些匹配状态页面,通过初始蜘蛛。

在我已经阅读过的所有示例中,我们可以编写规则来导航刮取到需要抓取的不同urls。在我的例子中,我只想为不同的匹配状态链接编写一个规则。但是,如果您看到我想刮的页面,“Match Stats”链接的格式如下:javascript:makePopup('match_stats_popup.php?matchID=183704502')。正如我在网上读到的(我可能错了!),scrapy无法处理javascript,因此不能“单击”该链接。但是,由于链接是javascript弹出窗口,因此可以将链接的match_stats_popup.php?matchID=183704502部分添加到主url以获得标准的html页面:

代码语言:javascript
复制
http://www.tennisinsight.com/match_stats_popup.php?matchID=183704502

我希望我能在刮擦之前修改一下规则。总之,我只想找到类型为:javascript:makePopup('match_stats_popup.php?matchID=183704502的链接,并对它们进行修改,使它们现在属于http://www.tennisinsight.com/match_stats_popup.php?matchID=183704502类型。

到目前为止,这是我在规则中所写的,它没有打开任何页面:

代码语言:javascript
复制
rules = (
    Rule(SgmlLinkExtractor(allow='/match_stats_popup.php?matchID=\d+'),
        'parse_match', follow=True,
    ),
)

parse_match是从打开的匹配状态弹出解析数据的方法。

希望我的问题足够清楚!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-10 06:29:58

使用BaseSgmlLinkExtractor或SgmlLinkExtractor,您可以指定要从中提取的标记和用于提取链接的process_value函数。官方文档中有好例子。下面是示例的代码:

代码语言:javascript
复制
class GetStatsSpider(CrawlSpider):
    name = 'GetStats'
    allowed_domains = ['tennisinsight.com']
    start_urls = ['http://www.tennisinsight.com/player_activity.php?player_id=1']

    def getPopLink(value):
        m = re.search("javascript:makePopup\('(.+?)'\)", value)
        if m:
            return m.group(1)

    rules = (
            Rule(SgmlLinkExtractor(allow=r"match_stats_popup.php\?matchID=\d+",
                restrict_xpaths='//td[@class="matchStyle"]',
                tags='a', attrs='href', process_value=getPopLink), callback='parse_item', follow=True),
            )

    def parse_item(self, response):
        sel = Selector(response)
        i = TennisItem()
        i['url_stats'] = response.url
        return i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22289742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档