问题描述
我需要确定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"]
尽管output ct
返回带有两行的.csv文件: content-type
和text/html
,但将上述内容输出到.csv文件仍返回空白文件。
如何仅提取答案的“ html”文本部分?
1楼
您可以使用lxml模块并将文本导入为html。 如果解析成功,则为HTML。
from lxml import etree
我正在打电话,所以我不能给你一个完整的例子。 etree.parse是您想要的方法。
2楼
Scrapy希望您从解析方法中返回一个项目。 它可以是dict或 。
如果您对Content-Type感兴趣:
def parse(self, response):
ct = response.headers.get("content-type", "").lower()
return {'content-type': ct}
Scrapy有一个非常不错的教程。 值得花一点时间来关注它: :
编辑:
您可以在response.text
属性中找到HTML代码。
但是通常,您只需要这段代码。
因此,更好的方法是使用选择器 。
例如,要获取片段<h1>Hello world</h1>
的文本,可以使用:
title = response.css('h1::text').get()
return {'title': title}
花一些时间阅读的 。 值得投资。
3楼
不知道它是否还在附近。 但这听起来好像buildwith模块可能对您有用吗?
它向您展示了正在实施的各种JavaScript框架,Web框架和Web服务器。 您可以使用Google Web框架并确定它们是否用于动态加载内容。
您可以:pip install buildwith