如何解决当抓取的链接内容中包含HTML时,link_text为空
在CrawlSpider中,我使用LinkExtractor在其中分配回调。
在回调中,我使用response
变量来获取链接信息,例如response.url
和response.status
。我还需要提取链接的内容,所以我在meta中找到了它:response.meta.get('link_text')
。
此方法面临的问题是link_text
返回HTML可用字符串。这是一个示例:
<a href="/page1">My link</a>
,link_text将返回“我的链接”,而<a href="/page1"><svg><path/></svg> My link <span>...</span></a>
,link_text将返回“”!
我不介意剥离HTML标记,但是我无法提取“我的链接”字符串这一事实对我来说是个问题。 还有另一种方法可以实现这一目标吗?
编辑:
这是我的代码。 如您所见,当链接中有HTML时,linktext将返回“”。
import scrapy
from scrapy.spiders import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.item import Item,Field
class MyItem(Item):
url = Field()
status = Field()
context = Field()
link_text = Field()
class MySpider(CrawlSpider):
name = 'creepy_crawler'
target_domains = ['example.com']
start_urls = ['https://example.com/']
rules = [
Rule(
LinkExtractor(allow_domains=target_domains),callback='parse_internal',follow=True
)
]
def parse_internal(self,response):
referer = response.request.headers.get('Referer')
if response.status != 200 and referer is not None:
linktext = " ".join(response.meta.get('link_text').split())
if linktext == "":
linktext = "Must have html in it.."
item = MyItem()
item['url'] = response.url
item['status'] = response.status
item['context'] = referer
item['link_text'] = linktext
yield item
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。