问题描述
我做了一个刮板,可以浏览论坛中的主题并保存用户发布的所有链接。 问题在于论坛使用了“您真的要离开该网站”的东西。 这使得我抓取的链接不完整,如下所示:
/leave.php?u=http%3A%2F%2Fwww.lonestatistik.se%2Floner.asp%2Fyrke%2FUnderskoterska-1242
要工作,它需要链接开头的website域。
有办法添加吗? 或仅抓取目标网址。
def parse(self, response):
next_link = response.xpath("//a[contains(., '>')]//@href").extract()[0]
if len(next_link):
yield self.make_requests_from_url(urljoin(response.url, next_link))
posts = Selector(response).xpath('//div[@class="post_message"]')
for post in posts:
i = TextPostItem()
i['url'] = post.xpath('a/@href').extract()
yield i
-edit-因此,基于eLRuLL的答案,我做到了。
def parse(self, response):
next_link = response.xpath("//a[contains(., '>')]//@href").extract()[0]
if len(next_link):
yield self.make_requests_from_url(urljoin(response.url, next_link))
posts = Selector(response).xpath('//div[@class="post_message"]')
for post in posts:
i = TextPostItem()
url = post.xpath('./a/@href').extract_first()
i['new_url'] = urljoin(response.url, url)
yield i
哪个有效。 除此之外,我现在为每个帖子都抓取一个URL,即使该帖子没有发布链接。
1楼
看起来您需要在新网址的开头添加域网址。
您可以尝试使用response.url
将基本网址附加到新网址中,如下所示:
from urlparse import urljoin
...
url = post.xpath('./a/@href').extract_first()
new_url = urljoin(response.url, url) # someurl.com/leave.php?...
yield Request(new_url, ...)
...