我假装使用此页面顶部的下拉列表中的每个列表进行爬网:https://www.anmp.pt/anmp/pro/mun1/mun101w3.php?cod=M2200(具有Scrapy框架)。
然后,对于找到的每个项目,我都会得到一个新页面,在该页面上,我得到了一些更多的数据,这些数据必须填充Models.py中实例化的模型
我可以获取数据,但是无法将其放入模型的flask.Fields()中。我在网上搜索了提示,但没有成功。
蜘蛛网中的“ contacto”字段仅用于收集以下两个字段:
抱歉,名称是葡萄牙语,但这是葡萄牙语应用程序!
这是我的Spider.py:
#-*-编码:utf-8-*-
进口沙皮
导入urlparse
从scrapy.http导入FormRequest
从scrapy.loader导入ItemLoader
从municipios.items导入Municipio
导入时间
类GetmunSpider(scrapy.Spider):
名称='getMun'
allowed_domains = ['anmp.pt']
start_urls = ['https://www.anmp.pt/anmp/pro/mun1/mun101w3.php?cod=M2200']
def municipio_attr(自我,回应):
municipios_url = response.xpath('// select / option / @ value')。extract()
用于municipios_url中的municipio:
full_url = [municipios_url中代表我的'https://www.anmp.pt/anmp/pro/mun1/{0}'.format(i)]
产生FormRequest.from_response(str(full_url),callback = self.parse)
def parse(自身,响应):
#dados do municipio
municipio = ItemLoader(项目= Municipio(),响应=响应)
municipio.add_xpath('nome','// div [@ class =“ sel3”] / text()'。extract())
municipio.add_xpath('pres_camara','// div [@ class =“ f3”] / text()'
[3] .extract()。split(“,”)[0]
municipio.add_xpath('pres_assembleia','// div [@ class =“ f3”] / text()'
[4] .extract()。split(“,”)[0]
municipio.add_xpath('contacto','// div [@ class =“ sel2”] / text(
)')。提取()
municipio.add_value('endereco',“” .join(contacto)[:-42])
municipio.add_value('telefone',contacto [2])
municipio.add_value('fax',contacto [3])
返回Municipio.load_item()
这些是要填充的字段:
进口沙皮
从scrapy.item导入项目,字段
Municipio类(scrapy.Item):
Nome = scrapy.Field()
pres_camara = scrapy.Field()
pres_assembleia = scrapy.Field()
endereco = scrapy.Field()
Telefone = scrapy.Field()
传真= scrapy.Field()