source

Python 및 Scrapy 및 MariaDB/MYSQL 데이터베이스로 스크랩된 데이터 가져오기 시도

nicesource 2023. 7. 23. 14:22
반응형

Python 및 Scrapy 및 MariaDB/MYSQL 데이터베이스로 스크랩된 데이터 가져오기 시도

아래 코드는 미완성인 것으로 알고 있지만, 제가 하려는 것은 단지 그 수율 결과를 제 MARIADB로 가져오는 것뿐입니다.저는 이 답을 찾기 위해 스택 오버플로를 뒤지는 데 너무 많은 시간을 보냈습니다.코드가 잘 작동하고 정적 정보가 있는 데이터베이스에 입력하기 위해 수동으로 최종 항목을 추가할 수 있지만 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(),
            }`

스파이더와 함께 DB와의 연결을 설정하고 있으므로 항목을 생성하는 대신 커서가 삽입 쿼리를 실행하도록 할 수 있습니다.

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메서드가 해당 항목을 처리하기 위해 호출됩니다.여기 문서에서 파이프라인의 몇 가지 예를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/62774973/python-and-scrapy-and-attempting-to-get-scraped-data-into-mariadb-mysql-databas

반응형