다음 페이지에서 데이터를 가져 오는 데 사용할 수없는 URL을 가져 와서 base_url = 'http://www.marinetraffic.com'
변수를 만들고 스크래피 요청을 전달했습니다. port_homepage_url = base_url + port_homepage_url
. 이렇게 결과가 나오면 잘 작동합니다. yield {'a': port_homepage_url, 'b':item['port_name']}
내가 원하는 결과를 얻습니다.
그러나 스크래피 요청에 넣으면 yield scrapy.Request(port_homepage_url, callback=self.parse, meta={'item': item})
오류가 발생합니다.
port_homepage_url = base_url + port_homepage_url
TypeError: cannot concatenate 'str' and 'NoneType' objects
여기에 코드가 있습니다
class GetVessel(scrapy.Spider):
name = "getvessel"
allowed_domains = ["marinetraffic.com"]
start_urls = [
'http://www.marinetraffic.com/en/ais/index/ports/all/flag:AE',
]
def parse(self, response):
item = VesseltrackerItem()
base_url = 'http://www.marinetraffic.com'
for ports in response.xpath('//table/tr[position()>1]'):
item['port_name'] = ports.xpath('td[2]/a/text()').extract_first()
port_homepage_url = ports.xpath('td[7]/a/@href').extract_first()
port_homepage_url = base_url + port_homepage_url
yield scrapy.Request(port_homepage_url, callback=self.parse, meta={'item': item})
이 문제는 초기 시작 URL 페이지에서 발생하지 않지만 나중에 후속 요청이 처리 될 때 발생합니다. 예를 들어이 페이지를보십시오 . 7 번째 td
요소 에는 링크가 없으므로 ports.xpath('td[7]/a/@href').extract_first()
반환 None
되어 port_homepage_url = base_url + port_homepage_url
라인에 오류가 발생 합니다.
문제에 접근하는 방법은 "포트"페이지에서 수행 할 계획에 따라 다릅니다. 내가 이해 한 바에 따르면 "포트"페이지 요청을 실제로 처리 self.parse
하려는 것이 아니라 내부에 다른 로직이있는 별도의 콜백이 필요합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다