Python Scrapy,“.lstrip”如何使用?

Python Scrapy, how to use ".lstrip"?

这是我使用 scrapy 的简单 google 搜索结果爬虫。

class GoogleBotsSpider(scrapy.Spider):
name = 'GoogleScrapyBot'
allowed_domains = ['google.com']

start_urls = ['https://www.google.com/search?q=apple&hl=en&rlz=&start=0']

def parse(self, response):

    titles = response.xpath('//*[@id="main"]/div/div/div/a/h3/div//text()').extract()
    links = response.xpath('//*[@id="main"]/div/div/div/a/@href').extract()

    items = []

    for idx in range(len(titles)):
        item = GoogleScraperItem()
        item['title'] = titles[idx]
        item['link'] = links[idx]
        items.append(item)

    return items

然而,在某些项目['link']中出现了“/url?q=”

{'link': '/url?q=https://www.apple.com/&sa=U&ved=2ahUKEwj398Kv177xAhUFUKwKHZ_qAKkQFjAAegQICBAB&usg=AOvVaw1rYEJO8-kDCh7A5C3AggNG', 'title': 'Apple Inc. - Wikipedia'}

我想使用 ".lstrip("/url?q=")" 删除 "/url?q.=" 但我不知道该放在哪里这个。

您应该使用 .lstrip 如下:

for idx in range(len(titles)):
        item = GoogleScraperItem()
        item['title'] = titles[idx]
        item['link'] = links[idx].lstrip("/url?q=")
        items.append(item)

关于 lstrip 的一点警告:

.lstrip("/url?q=") 在这里工作是因为 url 以 'h' 开头,所以它在 '=' 之后停止剥离。但请注意,lstrip 将去除任何字符 '/'、'u'、'r'、'l'、'?'、'q' 或 '='。

.lstrip("u=rlq/?") 会给出相同的结果。

工作原理示例:

txt = "/url?q=lurq.com"
x = txt.lstrip("/url?q=")
print(x) # prints ".com"

我宁愿使用 .replace('/url?q=', '', 1)。第三个参数在这里强制删除第一次出现。

这些也有效:

txt.replace('/url?q=', '', 1)
txt[7:]
txt.split('=', 1)[-1]