我需要使用Regex从多个URL的脚本标签中提取数据。我设法实现了完成一半工作的代码。我有一个csv文件('links.csv '
),其中包含我需要抓取的所有网址。我设法读取了csv,并将所有网址存储在名为'start_urls'
的变量中。我的问题是我需要一种方法来一次从'start_urls'
中读取url并执行代码的下一部分。
在终端中执行代码时,我会收到2个错误:
1.ERROR:获取启动请求时出错 2. TypeError:请求网址必须为str或unicode,获取列表
如何修复我的代码?我是Scrapy的初学者,但我确实需要此脚本才能正常工作……谢谢您!
以下是我存储在初始csv('links.csv')中的url的一些示例:
"https://www.samsung.com/uk/smartphones/galaxy-note8/"
"https://www.samsung.com/uk/smartphones/galaxy-s8/"
"https://www.samsung.com/uk/smartphones/galaxy-s9/"
这是我的代码:
import scrapy
import csv
import re
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
with open('links.csv','r') as csvf:
for url in csvf:
yield scrapy.Request(url.strip())
def parse(self, response):
source = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()[0]
def get_values(parameter, script):
return re.findall('%s = "(.*)"' % parameter, script)[0]
with open('baza.csv', 'w') as csvfile:
fieldnames = ['Category', 'Type', 'SK']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for pvi_subtype_name,pathIndicator.depth_5,model_name in zip(source):
writer.writerow({'Category': get_values("pvi_subtype_name", source), 'Type': get_values("pathIndicator.depth_5", source), 'SK': get_values("model_name", source)})
答案 0 :(得分:0)
将以下方法添加到蜘蛛:
def start_requests(self):
with open('links.csv','r') as csvf:
for url in csvf:
yield scrapy.Request(url.strip())
并从代码中删除先前的with...
块。