我需要确定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
我将Spider的结果输出到.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
返回带有两行的{.1v}和content-type
的.csv文件。如何仅提取答案的“ html”文本部分?
答案 0 :(得分:0)
您可以使用lxml模块并将文本导入为html。如果解析成功,则为HTML。
from lxml import etree
我在打电话,所以我不能给你一个完整的例子。 etree.parse是您想要的方法。
答案 1 :(得分:0)
Scrapy希望您从解析方法中返回一个项目。它可以是字典或Item object。
如果您对Content-Type感兴趣:
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}
花一些时间阅读documentation page about selectors。值得投资。
答案 2 :(得分:0)
不确定它是否还在附近。但这听起来好像buildwith模块可能对您有用吗?
它向您展示了正在实施的各种JavaScript框架,Web框架和Web服务器。您可以使用Google Web框架并确定它们是否用于动态加载内容。
您可以:通过以下方式进行pip安装: