我是新来Scrapy的。我已经学会了如何使用response.css()来读取网页中的特定方面,并且正在避免学习xpath系统。它似乎做了完全相同的事情,但格式不同(如果我错了,请纠正我)
我正在抓取的网站有很长的文本段落,中间偶尔会有链接的文本。下面这个带有link to a picture of a dog的句子就是一个例子。我不确定是否有办法让爬虫读取文本,并提供链接(我只使用了response.css("p::text").extract())。
有没有一种方法,使用CSS (最好是)或xpath,我可以抓取段落中的所有文本,包括嵌入链接的文本,而不需要将链接或链接文本移出句子?在这方面的措辞是困难的,所以如果我需要重新解释或举一个例子,很抱歉。
编辑:需要一些澄清,这在一开始没有得到很好的解释。此网页中的语句可以看起来像:<p>My sentence has a <a href="https://www.google.com">link to google</a> in it.</p>,但当您使用response.css("p::text").extract()时,该句子将显示为列表“我的句子有一个","in it.",完全否定了链接中的文本。我的目标是:“我的句子中有一个指向谷歌的链接。”
发布于 2019-04-22 14:38:28
您可以尝试使用以下表达式提取文本:
>>> txt = """<p>My sentence has a <a href="https://www.google.com">link to google</a> in it.</p>"""
>>> from scrapy import Selector
>>> sel = Selector(text=txt)
>>> sel.css('p ::text').extract()
[u'My sentence has a ', u'link to google', u' in it.']
>>> ' '.join(sel.css('p ::text').extract())
u'My sentence has a link to google in it.'或者,例如,使用w3lib.html库从您的响应中清除html标记。通过这种方式:
from w3lib.html import remove_tags
with_tags = response.css("p").get()
clean_text = remove_tags(with_tags)但第一个变体看起来更短,更具可读性。
发布于 2019-04-23 14:05:15
在提取整个段落后使用html-text:
from html_text import extract_text
for paragraph in response.css('p'):
html = paragraph.get()
text = extract_text(html)https://stackoverflow.com/questions/55779773
复制相似问题