links.txt
www.link.com/1 | linkname1
www.link.com/2 | linkname2
www.link.com/3 | linkname3
我的目标是为 start_urls 变量设置“ www.link.com/1 ”链接,为 linkname1 ” >名称变量。然后我的其他代码能够从链接“www.link.com/1”中删除数据。那么它应该处理另一行“ www.link.com/2 | linkname2 ”。我想继续这样的数千行的过程。 我的代码只适用于一行。它不适用于下一行。所以我的问题是我如何遍历文本文件中的所有行。
我的Scrapy代码:
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]
f.close()
class LinkSpider(scrapy.Spider):
allowed_domains = ["link.com"]
start_urls = start_url;
到目前为止我可以试试这个。此代码仅处理一行。我需要为成千上万的线做。任何建议/提示都会非常有用。
答案 0 :(得分:2)
scrapy.Spider.__init__同时接受name
和start_url
。
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)
输出继电器:
name: linkname1, start urls: ['www.link.com/1']
name: linkname2, start urls: ['www.link.com/2']
name: linkname3, start urls: ['www.link.com/3']
答案 1 :(得分:1)
您循环遍历文本文件的行并提取变量start_url
和name
,这可以正常工作。但是使用这些变量的代码部分不在循环中。
另外我假设你想为每一行创建一个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()
一个小小的旁注,而不是:
for pair in listoflinks:
start_url = [pair[0]]
name = pair[1]
...
你可以写:
for start_url, name in listoflinks:
...