Scrapy Spider를 사용하여 텍스트 파일에서 URL 목록을 크롤링합니다. 나는 파이썬과 스콥에 대해 다소 새로운 편이다. 나는이 일을 끝내기 위해 날개를 달기 만하면된다.Scrapy Spider : n 번째 줄부터 url 목록을 크롤링
URL을 내 목록은 오히려 큰, 그래서 이것은 내가 그것을 구현하는 방법입니다 : 내가 지금 무엇을 구문 분석하고 있지 않다
from scrapy.spider import BaseSpider
from scrapy.http.request import Request
import time
class MySpider(BaseSpider):
name = "example"
allowed_domains = ["example.com"]
def __init__(self, filename=None, delay=5, start_line = 0):
self.currentline = 0
self.download_delay = int(delay)
self.filename = filename
self.start_line = int(start_line)
def start_requests(self):
with open(self.filename, 'r') as f:
for url in f.readlines():
self.currentline +=1
if self.currentline < self.start_line:
continue
else:
print(self.currentline)
yield Request(url.strip(), self.parse)
def parse(self, response):
logfilename = 'log'
with open(logfilename, 'a') as f:
f.write('Crawled line ' + str(self.currentline) + ' of ' + self.filename + ': ' + response.url + '\n')
, 난 그냥 그것을 로깅, 나중에 걱정 것을 지금. 나는 그것을 전화
는 말 :의 URL 목록이 상당히 크다고 할 수있다
scrapy runspider myfolder\kwdSpider.py -a filename=myfolder\urls.txt -a delay=10 -a start_line=124
때문에 내가 지정된 start_line에서 크롤링 다시 시작하는 옵션을 구현 (및 yield Request()
사용). 실제로는 모든 것이 잘 작동합니다 :
E:\Python27>scrapy runspider mysite\kwdSpider.py -a filename=example\urls.txt -a delay=8 -a start_line=124
E:\Python27\example\kwdSpider.py:5: ScrapyDeprecationWarning: kwdSpider.MySpider inherits from deprecated class scrapy.spider.BaseSpider, please inherit from scrapy.spider.Spider. (warning only on first subclass, there may be others)
class MySpider(BaseSpider):
2017-12-06 12:27:35+0100 [scrapy] INFO: Scrapy 0.25.1 started (bot: scrapybot)
2017-12-06 12:27:35+0100 [scrapy] INFO: Optional features available: ssl, http11
2017-12-06 12:27:35+0100 [scrapy] INFO: Overridden settings: {}
2017-12-06 12:27:35+0100 [scrapy] INFO: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2017-12-06 12:27:35+0100 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2017-12-06 12:27:35+0100 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2017-12-06 12:27:35+0100 [scrapy] INFO: Enabled item pipelines:
2017-12-06 12:27:35+0100 [example] INFO: Spider opened
2017-12-06 12:27:35+0100 [example] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-12-06 12:27:35+0100 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6024
2017-12-06 12:27:35+0100 [scrapy] DEBUG: Web service listening on 127.0.0.1:6081
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
2017-12-06 12:27:38+0100 [example] DEBUG: Crawled (200) <GET https://www.example.com/139th url> (referer: None)
140
2017-12-06 12:27:47+0100 [example] DEBUG: Crawled (200) <GET https://www.example.com/140th url> (referer: None)
141
처음 12 개 정도의 URL을 건너 뛰는 방법을보십시오. 분명히 스파이더가 어떻게 작동하는지 분명히 이해하지 못하고 있습니다. start_requests 루틴이 txt 파일을 통해 계산을 완료하기 전에 초기화되지 않았습니까? (이 방법은 제가 구현할 수있는 유일한 방법입니다)?
보너스 질문 -이 공지 사항은 무엇입니까?
@kwdSpider.MySpider inherits from deprecated class scrapy.spider.BaseSpider, please inherit from scrapy.spider.Spider. (warning only on first subclass, there may be others)
class MySpider(BaseSpider):
감사합니다.
결국 건너 뛴 URL로 돌아갑니다. 나는 선형 적으로 작동하지 않는다고 생각합니다. 어느 한 도메인을 공격 할 비율을 제한합니다. 그게 당신 문제일까요? – Phil
필자는 그렇게 생각하지 않는다. 적어도 로그에 기록되지 않으며, 콘솔 출력에 표시되지 않는다. 로그와 콘솔 모두가 계속 진행됩니다 ( 줄 140, 141, 142, 143 등). 건너 뛰었던 줄에는 결코 돌아 가지 않습니다. 나는 거미가 그 처음 12 개의 선을 얻지 않고있다라고 말할 것이다. – Bodd
시작 줄이 다른 번호 (예 : 140) 인 경우 차이가 있습니까? 그냥 건너 뛰는 URL이나 파일 형식의 문제에는 문제가 없다는 것을 배제하려고합니다. 어쩌면 print 문에'url.strip()'을 추가하여 현실을 반영해야하는지 보여줄 수 있습니다. – Phil