我有一个从 MySQL 数据库中获取 start_urls 的爬虫蜘蛛。当它抓取每个页面时,它会返回未知数量的链接,这意味着它可以从它抓取的每个页面中获得零个链接或多达 10 个链接。因为这个数字是未知的,所以我不知道如何最好地让管道使用所有可能的抓取链接更新数据库,所以我让它转储 start_url 和抓取链接到新数据库。但是,如果我使用的是新数据库,我想将每个 start_url 的 searchterm 列值带入新数据库。
如果我可以获取每个 start_url 的 searchterm 列,我可以将其输入新数据库,或者如果有人对如何使用未知数量的抓取链接更新原始数据库有不同的想法,那也可以工作。
这是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