【问题标题】:Url generator for start URLs scrapy (only reads first URL), why?用于启动 URL 的 URL 生成器 scrapy(仅读取第一个 URL),为什么?
【发布时间】:2014-02-09 12:03:42
【问题描述】:

我正在使用 scrapy 作为网络抓取框架,并为一组公司抓取多个不同的域。我生成了一个 URL 生成器类,它读取公司文件并为不同网页上的公司生成一个起始 URL(仅显示一个示例公司)。网络爬虫对于第一条记录运行良好,但对于其他 URL 则不运行。我已经测试了 URL 生成器并返回所有 URL,但由于某种原因这不起作用 start_urls = [start_url.company-site()]。有什么想法吗?

网址生成器文件。

# -*- coding: utf-8 -*-
import os 
import os.path

class URL(object):
    P=[]

    def read(self, filename):
        with open(filename) as f:
            for line in f:
                field = line.split(',')
                company = field[1].replace(" ", '+')
                adress="{0}+{1}".format(field[5],field[11])
                self.P.append("http://www.companywebpage.com/market-search?q={0}".format(company))

    def company-site(self):
        for i in self.P:
            return i

蜘蛛文件

root = os.getcwd()
start_url = URL()
p = os.path.join(root, 'Company_Lists', 'Test_of_company.csv')
start_url.read(p)

class company-spider(BaseSpider):
    name = "Company-page"
    allowed_domains = ["CompanyDomain.se"]
    start_urls = [start_url.company-site()]

【问题讨论】:

  • 我不确定在类/函数的名称中使用 - 字符是否有效,我在 python 2 和 3 中都得到了 SyntaxErrors。

标签: python class url scrapy


【解决方案1】:

替换

def company-site(self):
    for i in self.P:
        return i

def urls(self):
    for url in self.P:
        yield url

替换

start_urls = [start_url.company-site()]

start_urls = start_url.urls()

start_urls = start_url.P

因为Spider.start_requests 看起来像这样:

def start_requests(self):
    for url in self.start_urls:
        yield self.make_requests_from_url(url)

【讨论】:

  • 它适用于添加产量并删除 [] 括号。谢谢!
  • 因为您是新来的,请考虑接受和/或支持有用的答案
  • 我不能。我需要更多积分。获得 15 分的最佳方法是什么,所以我至少可以投票?
  • 我赞成你的问题。当您获得足够的分数时,您可以接受未接受的答案。如果您的问题和答案被认为是好的,您可以获得积分。
  • 谢谢,一旦我获得足够的学分,我会投票给你回答。
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多