Python 和 Scrapy,并试图将抓取的数据放入 MariaDB/MYSQL 数据库

Python and Scrapy, and attempting to get scraped data into MariaDB/MYSQL Database

据我所知,下面的代码尚未完成,但我只是想尝试将这些收益结果输入我的 MARIADB。我花了太多时间梳理 Whosebug,寻找这个答案。代码运行良好,我可以手动添加最终项目以使用静态信息将内容输入数据库,但我已经在 for 循环中尝试了所有可能的方法。

我只需要最后几行代码就可以解决这个问题,我相信我可以继续最终抓取数据。

import scrapy
import mysql.connector
from scrapy.selector import Selector

mydb = mysql.connector.connect(
  host="localhost",
  database="database",  
  user="root",
  password="password"
)

mycursor = mydb.cursor()
sql = "INSERT INTO testTable (name) VALUES (%s)"

class scrapysclass(scrapy.Spider):
    name = "scrapy-name"

    start_urls = ['url']

    def parse(self, response):
        quotes = str(response.xpath('//comment()').extract())
        quotes = quotes.replace('<!--','').replace('-->','')
        sel = Selector(text=quotes)
        for row in sel.xpath('//table[@id="tableid"]//tbody/tr'):
            yield {
                'first' : row.xpath('td[1]//text()').extract_first(),
                'last': row.xpath('td[2]//text()').extract_first(),
                'handle' : row.xpath('td[3]//text()').extract_first(),
            }`

由于您正在与蜘蛛一起建立与数据库的连接,因此您可以让游标执行插入查询而不是生成项目。

sql = "INSERT INTO testTable (name, last_name, handle) VALUES (%s, %s, %s)"

...

for row in sel.xpath('//table[@id="tableid"]//tbody/tr'):
    first = row.xpath('td[1]//text()').extract_first()
    last = row.xpath('td[2]//text()').extract_first()
    handle = row.xpath('td[3]//text()').extract_first()
    
    data = (first, last, handle)
    mycursor.execute(sql, data)

请注意,我已经更改了您的 sql 声明,因为我不清楚应该将哪些数据放在那里。

我必须指出这不是最好的解决方案。

理想情况下,您的蜘蛛应该只负责抓取数据,而您应该编写一个项目管道来将数据插入数据库。

当你编写一个管道时,每当蜘蛛产生一个它被抓取的项目时,就会调用 process_item 方法来处理该项目。 Here in the docs 您会发现一些管道示例。