在Scrapy中检查数据库中是否存在字符串
发布时间:2022-08-21 17:45:49 385
相关标签: # css# mysql# 数据库# sql# 数据
在将项目发送到数据库之前,是否可以通过特定键(例如,通过 url)检查数据库中是否存在条目。即,在获取产品卡链接列表的阶段,在转到产品卡之前。在我的情况下,需要在def parse中检查数据库中是否有这样的URL,如果有,则跳过(继续),如果没有这样的地址,则转到parse_product...
我的蜘蛛:
class MyCrawlerSpider(scrapy.Spider):
name = 'my_crawler'
def start_requests(self):
url = 'https://example'
yield scrapy.Request(
url=url,
callback=self.parse
)
def parse(self, response, **cb_kwargs):
for item in response.css('.lvajR')[:6]:
url = response.urljoin(item.css('::attr("href")').get())
if not check_duplicates(url):
yield scrapy.Request(
url=url,
callback=self.parse_product)
def parse_product(self, response):
items = Items()
items['url'] = response.url
yield items
def check_duplicates(url):
connection = mysql.connector.connect(
host='xx.xxx.xxx.xxx',
port=3306,
user='*************',
password='***********!',
database='urls',
)
cursor = connection.cursor()
sqlq = f"SELECT url FROM my_table WHERE url = '{url}'"
cursor.execute(sqlq)
results = cursor.fetchone()
if results == '1':
return True
else:
return False
我的管道。py:
import mysql.connector
class MyCrawlerPipeline(object):
def __init__(self):
self.create_connection()
self.curr = self.conn.cursor()
def create_connection(self):
self.conn = mysql.connector.connect(
host='xx.xxx.xxx.xxx',
port=3306,
user='*************',
password='***********!',
database='urls',
)
def process_item(self, item, spider):
self.store_db(item)
return item
def store_db(self, object):
self.curr.execute(
"""
INSERT IGNORE INTO table (url) VALUES (%s)
""",
(
item['url'],
)
)
self.conn.commit()
是否可以更优雅地实现这一点,例如,以某种方式注册检查重复项中间件中的功能?
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报