![](/img/trans.png)
[英]Scrapy spider scrape the last URL from the list of URLs in a text file
[英]Scrapy read list of URLs from file to scrape?
我剛剛安裝了scrapy,並按照他們的簡單dmoz 教程工作。 我只是查找了python的基本文件處理,並試圖讓爬蟲從文件中讀取URL列表,但是出現了一些錯誤。 這可能是錯的,但我試了一下。 有人請告訴我一個將URL列表讀入scrapy的例子嗎? 提前致謝。
from scrapy.spider import BaseSpider
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
f = open("urls.txt")
start_urls = f
def parse(self, response):
filename = response.url.split("/")[-2]
open(filename, 'wb').write(response.body)
你非常接近。
f = open("urls.txt")
start_urls = [url.strip() for url in f.readlines()]
f.close()
...更好的方法是使用上下文管理器確保文件按預期關閉:
with open("urls.txt", "rt") as f:
start_urls = [url.strip() for url in f.readlines()]
如果Dmoz只期望列表中的文件名,則必須在每一行上調用strip。 否則,您會在每個URL的末尾得到一個'\\ n'。
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [l.strip() for l in open('urls.txt').readlines()]
Python 2.7中的示例
>>> open('urls.txt').readlines()
['http://site.org\n', 'http://example.org\n', 'http://example.com/page\n']
>>> [l.strip() for l in open('urls.txt').readlines()]
['http://site.org', 'http://example.org', 'http://example.com/page']
在寫我的Scrapy helloworld時會出現類似的問題。 除了從文件中讀取URL之外,您可能還需要輸入文件名作為參數。 這可以通過Spider參數機制來完成。
我的例子:
class MySpider(scrapy.Spider):
name = 'my'
def __init__(self, config_file = None, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
with open(config_file) as f:
self._config = json.load(f)
self._url_list = self._config['url_list']
def start_requests(self):
for url in self._url_list:
yield scrapy.Request(url = url, callback = self.parse)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.