Вопрос по python – Объединение базового URL с результирующим href в scrapy

9

ниже мой код паука,

class Blurb2Spider(BaseSpider):
   name = "blurb2"
   allowed_domains = ["www.domain.com"]

   def start_requests(self):
            yield self.make_requests_from_url("http://www.domain.com/bookstore/new")


   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       urls = hxs.select('//div[@class="bookListingBookTitle"]/a/@href').extract()
       for i in urls:
           yield Request(urlparse.urljoin('www.domain.com/', i[1:]),callback=self.parse_url)


   def parse_url(self, response):
       hxs = HtmlXPathSelector(response)
       print response,'------->'

Здесь я пытаюсь объединить ссылку href с базовой ссылкой, но я получаю следующую ошибку,

exceptions.ValueError: Missing scheme in request url: www.domain.com//bookstore/detail/3271993?alt=Something+I+Had+To+Do

Может кто-нибудь, дайте мне знать, почему я получаю эту ошибку и как присоединить базовый URL с помощью ссылки href и выдать запрос

Ваш Ответ

2   ответа
5

Альтернативное решение, если вы не хотите использоватьurlparse:

response.urljoin(i[1:])

Это решение идет еще дальше: здесь Scrapy разрабатывает базу для присоединения. И, как вы видите, вам не нужно предоставлять очевидноеhttp://www.example.com для вступления.

Это делает ваш кодreusable в будущем, если вы хотите изменить домен, который вы сканируете.

12

Это потому, что вы не добавили схему, например, http: // в свой базовый URL.

Пытаться:urlparse.urljoin('http://www.domain.com/', i[1:])

Или еще проще:urlparse.urljoin(response.url, i[1:]) as urlparse.urljoin сам разберется с базовым URL.

Error: User Rate Limit Exceeded Shiva Krishna Bavandla
Error: User Rate Limit Exceededdocs.python.org/library/urlparse.html
Error: User Rate Limit Exceeded Shiva Krishna Bavandla
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Shiva Krishna Bavandla

Похожие вопросы