Hallo ich möchte die Daten von http://economictimes.indiatimes.com/archive.cms crawlen, werden alle URLs basierend auf Datum, Monat und Jahr archiviert, um zuerst die URL-Liste Ich verwende den Code von https://github.com/FraPochetti/StocksProject/blob/master/financeCrawler/financeCrawler/spiders/urlGenerator.py, modifiziert die Code für meine Webseite,URLs rekursiv aus Website-Archiven in scrapy extrahieren
import scrapy
import urllib
def etUrl():
totalWeeks = []
totalPosts = []
url = 'http://economictimes.indiatimes.com/archive.cms'
data = urllib.urlopen(url).read()
hxs = scrapy.Selector(text=data)
months = hxs.xpath('//ul/li/a').re('http://economictimes.indiatimes.com/archive.cms/\\d+-\\d+/news.cms')
admittMonths = 12*(2013-2007) + 8
months = months[:admittMonths]
for month in months:
data = urllib.urlopen(month).read()
hxs = scrapy.Selector(text=data)
weeks = hxs.xpath('//ul[@class="weeks"]/li/a').re('http://economictimes.indiatimes.com/archive.cms/\\d+-\\d+/news/day\\d+\.cms')
totalWeeks += weeks
for week in totalWeeks:
data = urllib.urlopen(week).read()
hxs = scrapy.Selector(text=data)
posts = hxs.xpath('//ul[@class="archive"]/li/h1/a/@href').extract()
totalPosts += posts
with open("eturls.txt", "a") as myfile:
for post in totalPosts:
post = post + '\n'
myfile.write(post)
etUrl()
gespeicherte Datei als urlGenerator.py
und lief mit dem Befehl $ python urlGenerator.py
ich kein Ergebnis bin immer, könnte mir jemand helfen, wie Sie diesen Code für Fall meiner Nutzung der Website zu übernehmen oder eine andere Lösung?
gibt es einen Aufruf von 'etUrl()', traditionell geschützt durch 'if __name__ ==" __main__ ": etUrl()' type Struktur? –
es ist auch ** SEHR WEIß ** Scrapy zu installieren, aber dann 'urllib' basierte Anfrage-Antwort zu verwenden; wohl, 50% von Scrapys Macht liegt darin, wie es mit diesem ganzen Prozess umgeht - einschließlich klar definierter Callbacks, um die 4-tiefe Einrückung zu vermeiden, die du dort hast –
Ich habe mir die Freiheit genommen, deinen Beitrag ein bisschen aufzuräumen, seit ich nehme an, du wolltest nicht 'etUrl()' rekursiv am unteren Rand aufrufen ... – Iguananaut