J'essaye de faire une araignée récursive pour extraire le contenu d'un site (exemple: web.com) qui a une structure de lien spécifique. Par exemple:Problèmes récursifs d'exploration de Scrapy
http://web.com/location/profile/12345678?qid=1403226397.5971&source=location&rank=21
http://web.com/location/profile/98765432?qid=1403366850.3991&source=locaton&rank=1
Comme vous pouvez voir que les parties numériques des URL changent et je dois analyser tous les liens suivants cette structure d'URL et extraire itemX, itemY et itemZ .
J'ai traduit la structure du lien en regex comme suit: '\ d +? Qid = \ d +. \ D + & source = emplacement & rank = \ d +'. Et le code Python-Scrapy comme suit, cependant, après que je lance l'araignée, rien est extrait par l'araignée:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from web.items import webItem
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.http import Request
from scrapy import log
import re
import urllib
class web_RecursiveSpider(CrawlSpider):
name = "web_RecursiveSpider"
allowed_domains = ["web.com"]
start_urls = ["http://web.com/location/profile",]
rules = (Rule (SgmlLinkExtractor(allow=('\d+?qid=\d+.\d+&source=location&rank=\d+',),)
, callback="parse_item", follow= True),
)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//*')
items = []
for site in sites:
item = webItem()
item["itemX"] = site.select("//span[@itemprop='X']/text()").extract()
item["itemY"] = site.select("//span[@itemprop='Y']/text()").extract()
item["itemZ"] = site.select("//span[@itemprop='Z']/text()").extract()
items.append(item)
return items
Merci, cela semble être l'un des problèmes. J'ai essayé votre démo dans Scrapy Shell et cela confirme que l'expression régulière devrait fonctionner maintenant. Cependant, lorsque je lance l'intégralité du code via 'scrapy crawl web_RecursiveSpider -o items.csv -t csv', le fichier CSV n'extrait toujours rien. La sortie cmd dit "... ScrapyDeprecationWarning ... .Myspider hérite de la classe obsolète scrapy.spider.BaseSpider, s'il vous plaît hériter de scrapy.spider.Spider ... INFO: Exploré 0 pages" – KubiK888
Je ne suis pas sûr si le "dépréciation "avertissement est le problème car j'ai d'autres robots de travail en dépit de cet avertissement. Toutes les suggestions ou conseils seront grandement appréciés. – KubiK888
@ KubiK888 non, l'avertissement de dépréciation n'est pas lié au problème. Pourriez-vous vérifier que les liens sont suivis au moins? Mettez une instruction d'impression dans le 'parse_item' et dans la boucle aussi. Merci. – alecxe