Python/Scrapy:如何确定一个页面是否是html?



我需要确定Scrapy spider下载的页面是否是html。我希望蜘蛛爬行的网站有pdf和html链接的组合。因此,如果它遇到pdf文件,它将通过PDFReader发送响应,否则它将按原样读取html文件。这是我代码的一部分,但它不起作用:

import scrapy
class QuotesSpider(scrapy.Spider):
name = "spyder_OLD"
allowed_domains = ['doc.scrapy.org']
start_urls = ['https://doc.scrapy.org/en/latest/index.html']
def parse(self, response):
ct = response.headers.get("content-type", "").lower()
return ct

我将蜘蛛的结果输出到.csv文件中,但它始终为空。只需ct = response.headers输出整个标头信息,这是无用的。我该怎么办?

编辑:我终于设法返回字典,但仍然无法提取相关信息:

import scrapy
class QuotesSpider(scrapy.Spider):
name = "spyder_OLD"
allowed_domains = ['doc.scrapy.org']
start_urls = ['https://doc.scrapy.org/en/latest/index.html']
def parse(self, response):
ct = {"content-type": response.headers.get("content-type", "").lower()}
return ct["content-type"]

将上述内容输出到.csv文件仍然返回一个空白文件,尽管output ct返回一个包含两行的.csv文件:content-typetext/html。如何仅提取答案的"html"文本部分?

Scrapy 希望您从解析方法返回一个项目。它可以是字典或 Item 对象。

如果您对内容类型感兴趣:

def parse(self, response):
ct = response.headers.get("content-type", "").lower()
return {'content-type': ct}

Scrapy有一个非常好的教程。值得花点时间关注它:https://doc.scrapy.org/en/latest/intro/tutorial.html

编辑:

您可以在response.text属性中找到 HTML 代码。但通常,您只需要一段代码。因此,更好的方法是使用选择器。例如,要仅获取代码段<h1>Hello world</h1>中的文本,您可以使用:

title = response.css('h1::text').get()
return {'title': title}

花一些时间阅读有关选择器的文档页面。值得投资。

您可以使用 lxml 模块并将文本导入为 html。 如果它成功解析它,那么它就是 HTML。

from lxml import etree

我正在打电话,所以我不能给你一个完整的例子。 etree.parse是你想要的方法。

不确定它是否还在。但听起来内置模块可能对您有用?

它向您展示了正在实现的各种JavaScript框架,Web框架和Web服务器。您可以谷歌Web框架并确定它们是否用于动态加载内容。

您可以:点安装内置

https://pypi.org/project/builtwith/1.3.3/

相关内容

最新更新