我知道下面的代码还没有完成,但是我只是想做的就是将这些收益结果存入我的MARIADB中。我花了太多时间梳理Stackoverflow,寻找这个答案。该代码很好用,我可以手动添加最后的项目,以将具有静态信息的内容输入数据库,但是我已经尝试了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(),
}`
答案 0 :(得分:1)
由于您正在与Spider一起建立与数据库的连接,因此可以使光标执行插入查询,而不是产生该项。
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您会找到一些管道示例。