我试图提取信息,但他们会给予我错误的不成形的列表,这些是页面链接https://rejestradwokatow.pl/adwokat/abaewicz-agnieszka-51004
import scrapy
from scrapy.http import Request
from scrapy.crawler import CrawlerProcess
class TestSpider(scrapy.Spider):
name = 'test'
start_urls = ['https://rejestradwokatow.pl/adwokat/list/strona/1/sta/2,3,9']
custom_settings = {
'CONCURRENT_REQUESTS_PER_DOMAIN': 1,
'DOWNLOAD_DELAY': 1,
'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
def parse(self, response):
wev={}
tic = response.xpath("//div[@class='line_list_K']//div//span//text()").getall()
det = response.xpath("//div[@class='line_list_K']//div//div//text()").getall()
wev[tuple(tic)]=[i.strip() for i in det]
yield wev
它们将给予如下输出:
但我希望输出如下:
3条答案
按热度按时间ny6fqffe1#
字典键不能是可变的,必须是可散列的。请尝试以下操作:
或者更简单:
koaltpgm2#
必须使用
zip()
对tic
和det
中的值进行分组这将给予
wev
,其中并且这将给予具有正确值的
CSV
编辑:
最后,您应该首先获取行,然后在每行中搜索
name
和value
。如果某行没有值,或者某行有异常值,如
email
,由JavaScript添加(但scrapy
可以运行JavaScript),但它将其作为属性保存在标签<div class="address_e" data-ea="adwokat.adach" data-eb="gmail.com">
中,这种方法有时会更安全因为只有一些页面有
Email
,所以它可能不会在文件中添加这个值-所以它需要在开始时添加默认值到wev = {'Email:': '', ...}
。完整工作代码
qyuhtwio3#
检查
tic
的数据类型。它很可能是一个不能作为字典键的列表。也许你可以根据自己的要求将它转换为元组。