2016-03-26 5 views
0

Это мой первый вопрос здесь, в stackoverflow Я играю с Scrapy, и я застрял там, где хочу обновить ссылку базы данных до сканирования = 1 после того, как ссылка была сделана от Scrapy.обновить таблицу базы данных из scrapy с помощью запроса Meta

# -*- coding: utf-8 -*- 
import scrapy 
import scrapy.http 
from scrapy.spiders import CrawlSpider, Rule 
from Testing.items import Testing100Item 
from scrapy.linkextractors import LinkExtractor 
from scrapy.http import Response 
from scrapy.http import Request 
from scrapy.selector import HtmlXPathSelector 
from scrapy.responsetypes import Response 
import re 
import MySQLdb 
from MySQLdb.cursors import SSCursor 
import MySQLdb.cursors 

##This is the connector to Database to Read New Domains 
def getdomainsfromdb(): 
    try: 
     conn = MySQLdb.connect(
      host="localhost", 
      user="root", 
      passwd="root", 
      db="Testing", 
      cursorclass = MySQLdb.cursors.SSCursor) 
     cursor = conn.cursor() 
     query = """ 
       SELECT domain_id, url, id_sitemap_links 
       from Sitemap_links 
       where scanned = 0;""" 
     cursor.execute(query) 
     return cursor.fetchall() 
    except Exception, e: 
     print e 

##This will update the scanned to 1 
def scanned(id_sitemap_links): 
    try: 
     conn = MySQLdb.connect(
      host="localhost", 
      user="root", 
      passwd="root", 
      db="Testing", 
      cursorclass = MySQLdb.cursors.SSCursor) 
     cursor = conn.cursor() 
     query = """ 
      UPDATE Sitemap_links 
      set scanned = 1 
      where id_sitemap_links = '%s' """ 
     cursor.execute(query, (int(id_sitemap_links),)) 
    except Exception, e: 
     print e 

class Testing100Spider(scrapy.Spider): 
    name = "testing100" 
    #allowed_domains = [] 
    #start_urls =() 

    def start_requests(self): 
     for domain_id, url, id_sitemap_links in getdomainsfromdb(): 
      yield Request(url, callback=self.parse, meta={'id_sitemap_links': id_sitemap_links}) 

    def parse(self, response): 

     # domain_id = response.meta['domain_id'] 
     id_sitemap_links = response.meta['id_sitemap_links'] 
     scanned(id_sitemap_links) 
     print id_sitemap_links 



     # def parse(self, response): 
     #  domain_id = Request(0) 
     #  item = Testing100Item() 
     #  #items = [] 

В это время я могу читать домен из getdomainsfromdb() функцию, но я не могу обновить идентификатор домена, который Scrapy работает над .. я могу напечатать id_sitemap_links но SQL не обновление ..

Что мне здесь не хватает? Спасибо заранее

ответ

1

Несколько вещей, чтобы исправить:

  • снимите enter code here из запроса (это, вероятно, ошибка проводки, хотя)
  • удалить кавычки вокруг заполнителя
  • добавить conn.commit()

Исправленный вариант:

conn = MySQLdb.connect(
    host="localhost", 
    user="root", 
    passwd="root", 
    db="Testing", 
    cursorclass = MySQLdb.cursors.SSCursor) 
cursor = conn.cursor() 
query = """ 
    UPDATE Sitemap_links 
    set scanned = 1 
    where id_sitemap_links = %s """ 
cursor.execute(query, (int(id_sitemap_links),)) 
conn.commit() 

Обратите внимание, что рекомендуется размещать функциональные возможности, специфичные для базы данных, в трубопроводах, а не непосредственно в пауках.

+0

вы спасли мою жизнь :) Я боролся с этим около 2 часов! – Marketingexpert

Смежные вопросы