以Scrapy中的start_urls依次读取文本文件链接

2024-09-29 23:15:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在链接.txt在

www.link.com/1 | linkname1
www.link.com/2 | linkname2
www.link.com/3 | linkname3

我的目标是设置“www.link.com/1“link for起始url变量,而“linkname1”用于名称变量。然后我的其他代码就能从链接中获取数据”www.link.com/1". 然后应该处理另一行“www.link.com/2|链接名2。我想把这个过程延续到几千条这样的线路上。 我的代码只对一行有效。下一行不行。所以我的问题是如何循环文本文件中的所有行。在

我讨厌的代码:

^{pr2}$

我可以试试这个。此代码只处理一行。我需要做成千上万的线。任何建议/暗示都会很有帮助。在


Tags: 代码txt名称comurl目标for链接
2条回答

您正在遍历文本文件的行并提取变量start_url和{},这两个变量工作得很好。但是使用这些变量的代码部分在循环之外。在

另外,我假设您想为每一行创建一个LinkSpider实例?然后您需要执行以下操作(更好的做法是编写一个以两个变量作为参数的构造函数):

class LinkSpider(scrapy.Spider):
    name = "link"
    allowed_domains = ["link.com"]
    start_urls = None

f = open('links.txt', 'r')
listoflinks = [line.strip().split(' | ') for line in f.readlines()]
for pair in listoflinks:
    start_url = [pair[0]]
    name = pair[1]

    ls = LinkSpider()
    ls.name = name
    ls.start_urls = start_url

    # do something with ls...

f.close()

一点旁注,而不是:

^{pr2}$

你可以写下:

for start_url, name in listoflinks:
    ...

scrapy.Spider.__init__同时接受name和{}。在

class LinkSpider(scrapy.Spider):
    allowed_domains = ["link.com"]

with open('links.txt', 'r') as links:
    for link in links:
        url, name = link.strip().split('|')
        spider = LinkSpider(name, start_urls=[url.strip()])
        print 'name: {}, start urls: {}'.format(spider.name, spider.start_urls)

输出:

^{pr2}$

相关问题 更多 >

    热门问题