我正在尝试为学校项目抓取雅虎股票,但我不知道如何使用非常确定的链接来浏览页面的每个链接。目标是使用 URL 的特定结尾部分迭代每只股票,如下所示:
Starting URL = ["https://ca.finance.yahoo.com/q/hp?s=BMO.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m"]
下一个 URL 类似于:
#Canadian Imperial(note the "CM"):
"https://ca.finance.yahoo.com/q/hp?s=CM.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m"
#Blackberry (note the "BB"):
"https://ca.finance.yahoo.com/q/hp?s=BB.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m"
等等...
换句话说,唯一会改变的是 "hp?s=" 和 ".TO&a" 之间的字符。
想知道这是否可能。 URL 的结尾部分必须与我需要访问的页面保持一致。不幸的是,雅虎的每个页面中都没有指向其他股票的链接。
如果我可以使用Scrapy 的规则和 SmglLinkExtractor 来做到这一点,那就更好了。
非常感谢任何帮助!
谢谢!
当前 Scrapy 代码:
from scrapy.spider import Spider
from scrapy.selector import Selector
from dirbot.items import Website
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
class DmozSpider(Spider):
name = "dmoz"
allowed_domains = ["ca.finance.yahoo.com"]
start_urls = [
"https://ca.finance.yahoo.com/q/hp?s=BMO.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m"
]
rules = [
Rule(LinkExtractor(allow=r"/q/hp\?s=\w+\.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m"), follow=True)
]
def parse(self, response):
item = Website()
item['name'] = response.xpath('//div[@class="title"]/h2/text()').extract()
print item['name']
最佳答案
制定规则来遵循
与模式匹配的链接:
rules = [
Rule(LinkExtractor(allow=r"/q/hp\?s=\w+\.\w+&a=\d+&b=\d+&c=\d+&d=\d+&e=\d+&f=\d+&g=m"), follow=True)
]
不过,我不确定您是否需要在此处检查所有 URL 参数。简化版:
rules = [
Rule(LinkExtractor(allow=r"/q/hp\?s=\w+\.\w+"), follow=True)
]
并且,不要忘记导入:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
关于python - Scrapy:抓取特定的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312699/