0
我有一個scrapy蜘蛛,它從MySQL數據庫獲取start_urls。當它刮擦每個頁面時,它會返回未知數量的鏈接,這意味着它可能具有零個鏈接或每個頁面最多可鏈接10個鏈接。因爲這個數字是未知的,我不知道如何最好讓管道更新數據庫與所有可能的刮傷的鏈接,所以我倒是將start_url和scraped鏈接轉儲到一個新的數據庫。但是,如果我正在使用新的數據庫,我想將每個start_url的searchterm列值引入新數據庫。Scrapy Pipeline未知數量的結果
如果我可以爲每個start_url獲取searchterm列,那麼我可以將其傳入新數據庫,或者如果有人對如何使用未知數量的scraped鏈接更新原始數據庫有不同的想法,那可能會工作也是如此。
這是spider.py。我已將有問題的線路註釋掉
import scrapy
import MySQLdb
import MySQLdb.cursors
from scrapy.http.request import Request
from youtubephase2.items import Youtubephase2Item
class youtubephase2(scrapy.Spider):
name = 'youtubephase2'
def start_requests(self):
conn = MySQLdb.connect(user='uname', passwd='password', db='YouTubeScrape', host='localhost', charset="utf8", use_unicode=True)
cursor = conn.cursor()
cursor.execute('SELECT * FROM SearchResults;')
rows = cursor.fetchall()
for row in rows:
if row:
#yield Request(row[0], self.parse, meta=dict(searchterm=row[0]))
yield Request(row[1], self.parse, meta=dict(start_url=row[1]))
cursor.close()
def parse(self, response):
for sel in response.xpath('//a[contains(@class, "yt-uix-servicelink")]'):
item = Youtubephase2Item()
#item['searchterm'] = response.meta['searchterm']
item['start_url'] = response.meta['start_url']
item['affiliateurl'] = sel.xpath('@href').extract_first()
yield item
使用你的邏輯我能夠弄清楚,我可以改變我的meta行: 收率請求(行[1],self.parse,元=字典(START_URL =行[1])) 到: 收率請求(行[1],self.parse,元=字典(START_URL = row [1],searchterm = row [0])) 並獲得我想要的其他字段。謝謝您的幫助。 – SDailey