Bonjour
Je suis débutant en python et ai un problème de compréhension avec l'insertion de données en base.
Mon objectif est d'insérer l'intégralité des liens trouvé sur un site dans une base cependant impossible d'insérer toutes les urls en base à chaque fois je n'insère qu'une ligne
Surement une incompréhension de ma part sur le fonctionnement de scrapy mais j'ai besoin d'un coup de main pour mieux comprendre
Vous trouverez ci-dessous les différents fichiers avec lesquels je travail
D'avance merci
itemp.spy
settings.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 from scrapy.item import Item, Field class TutorialItem(Item): pass class DmozItem(Item): link = Field()
pipelines.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 BOT_NAME = 'tutorial' SPIDER_MODULES = ['tutorial.spiders'] NEWSPIDER_MODULE = 'tutorial.spiders' ITEM_PIPELINES = ['tutorial.pipelines.MySQLPipeline']
__init__.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class MySQLPipeline(object): def __init__(self): import MySQLdb self.db = MySQLdb.connect(host="localhost", user="root", passwd="", db="crawler_engine") def process_item(self, item, spider): cursor = self.db.cursor() sql = "insert into urls(url, domain, num_crawl) values ('%s','%s','%s')" % (item['link'][0],'probikeshop', 1) cursor.execute(sql) return item def spider_closed(self, spider): self.db.commit()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from scrapy.spider import BaseSpider from scrapy.selector import Selector from tutorial.items import DmozItem from scrapy.selector import HtmlXPathSelector from scrapy.contrib.spiders import CrawlSpider from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor class Dmozv0Spider(BaseSpider): name = "dmozv0" allowed_domains = ["python.org"] start_urls = ["http://www.python.org/"] def parse(self, response): hxs = HtmlXPathSelector(response) item = DmozItem() item['link'] = hxs.select('//div/ul/li/a/@href').extract() return item
Partager