TypeError : scrapy.Request ()에 맞춤 URL을 배치 할 때 'str'및 'NoneType'개체를 연결할 수 없습니다.

누 샤드 모이 두니

다음 페이지에서 데이터를 가져 오는 데 사용할 수없는 URL을 가져 와서 base_url = 'http://www.marinetraffic.com'변수를 만들고 스크래피 요청을 전달했습니다. port_homepage_url = base_url + port_homepage_url. 이렇게 결과가 나오면 잘 작동합니다. yield {'a': port_homepage_url, 'b':item['port_name']}내가 원하는 결과를 얻습니다.

http://www.marinetraffic.com/en/ais/index/ships/range/port_id:20585/port_name:FUJAIRAH%20ANCH,FUJAIRAH ANCH

그러나 스크래피 요청에 넣으면 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})
Alecxe

이 문제는 초기 시작 URL 페이지에서 발생하지 않지만 나중에 후속 요청이 처리 될 때 발생합니다. 예를 들어이 페이지를보십시오 . 7 번째 td요소 에는 링크가 없으므로 ports.xpath('td[7]/a/@href').extract_first()반환 None되어 port_homepage_url = base_url + port_homepage_url라인에 오류가 발생 합니다.

문제에 접근하는 방법은 "포트"페이지에서 수행 할 계획에 따라 다릅니다. 내가 이해 한 바에 따르면 "포트"페이지 요청을 실제로 처리 self.parse하려는 것이 아니라 내부에 다른 로직이있는 별도의 콜백이 필요합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관