python - Scrapy:抓取特定的 URL

标签 python scrapy

我正在尝试为学校项目抓取雅虎股票,但我不知道如何使用非常确定的链接来浏览页面的每个链接。目标是使用 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/

相关文章:

python - 应用于空字段时出现 OneHotEncoding 错误

python - 更改图像管道的命名约定

python - Scrapy Mysql插入报错

python - 如何使用python迭代scrapy中的节点

python - Scrapy:下载器/response_count 与 response_received_count

python - 无法在我的代码中找到错误所在?

python - 带 GUI 进度显示的文件下载器?

python - 为什么没有检索到具有多对多关系的列名? SQL炼金术

python - 如何使用 BFS 找到迷宫中的最短路径?

Python:喜欢几个小模块还是一个大模块?