Javascript Scrapy:修改用于刮取网页的规则
我已经开始在我的一个项目中使用scrapy从一个网球网站上搜集数据。是一个示例页面,我想从中删除数据。如你所见,我想为网球运动员搜集数据。我需要递归地浏览整个页面,收集球员比赛的“比赛统计”(每场比赛旁边都有一个名为“比赛统计”的链接)。我已经编写了代码来解析打开的match stats弹出窗口中的数据。我现在需要做的就是通过最初的蜘蛛打开这些比赛统计页面 在我读过的所有示例中,我们都可以编写规则,将scrapy导航到需要刮取的不同URL。在我的例子中,我只想为不同的match stats链接编写一个规则。但是,如果您看到我想要抓取的页面,“Match Stats”链接的格式如下:Javascript Scrapy:修改用于刮取网页的规则,javascript,python,regex,scrapy,Javascript,Python,Regex,Scrapy,我已经开始在我的一个项目中使用scrapy从一个网球网站上搜集数据。是一个示例页面,我想从中删除数据。如你所见,我想为网球运动员搜集数据。我需要递归地浏览整个页面,收集球员比赛的“比赛统计”(每场比赛旁边都有一个名为“比赛统计”的链接)。我已经编写了代码来解析打开的match stats弹出窗口中的数据。我现在需要做的就是通过最初的蜘蛛打开这些比赛统计页面 在我读过的所有示例中,我们都可以编写规则,将scrapy导航到需要刮取的不同URL。在我的例子中,我只想为不同的match stats链接编
javascript:makePopup('Match\u Stats\u popup.php?matchID=183704502')
。正如我在网上读到的(我可能错了!),scrapy无法处理javascript,因此无法“点击”该链接。但是,由于链接是javascript弹出窗口,因此可以将链接的match_stats_popup.php?matchID=183704502
部分添加到主url以获得标准html页面:
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
这是我在规则中写的,没有打开任何页面:
rules = (
Rule(SgmlLinkExtractor(allow='/match_stats_popup.php?matchID=\d+'),
'parse_match', follow=True,
),
)
parse_match
是从打开的匹配统计弹出窗口中解析数据的方法
希望我的问题足够清楚!使用
BaseSgmlLinkExtractor
或SgmlLinkExtractor
您可以指定要从中提取的标记和用于提取链接的处理\u值
函数。在官方文档中有。以下是示例代码:
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
当我点击你的链接时,我只看到一个要点击的“比赛统计信息”。嗨!这是主链接:)有一个球员的比赛历史记录,每一场比赛都有一个对应的比赛统计信息链接,这会打开一个弹出窗口供你回复。这里是url:它有一个比赛统计链接的比赛列表。根据您提供的链接(谢谢!),代码看起来是否像这样:m=re.search(“javascript:makePopup('match_stats_popup.php?matchID=\d+'),value)m.group[1]在示例中指的是什么?:)