【发布时间】:2018-06-13 15:10:20
【问题描述】:
我正在尝试使用 parsel 库从 Scrapy 项目中的 html 文件中抓取元素。这是我的蜘蛛代码,名为123Spider:
import scrapy
import requests
class 123Spider(scrapy.Spider):
name = "123Spider"
start_url = [
'file://URI'
]
def parse(self, response):
for commentSelector in response.css("div._li"):
yield {
'comment': commentSelector.css('#js_ajn > p').extract(),
}
当我从命令行运行 scrapy crawl 123Spider -o output.json 时,它会导出一个空的 JSON 文件。终端显示这个过程:
2018-01-03 14:44:20 [scrapy.core.engine] DEBUG: Crawled (400) <GET https://raw.githubusercontent.com/robots.txt> (referer: None)
2018-01-03 14:44:20 [scrapy.core.engine] DEBUG: Crawled (404) <GET https://raw.githubusercontent.com/xxx.html> (referer: None)
2018-01-03 14:44:20 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <404 https://raw.githubusercontent.com/xxx.html>: HTTP status code is not handled or not allowed
问题:
- 为什么在爬取 .html 文件时返回错误 404 和 400?当我运行纯解析 .py 文件以及在 scrapy shell 中时,它都运行良好。 (html文件>10MB)
- 如何在我的 123Spider 类中正确嵌套 parsel 元素?
搜索了现有问题,但没有一个符合我的方案。
更新:
目的是解析我的蜘蛛项目结构中已经存在的 .html 文件。但是,在抓取file://URI 时,终端显示没有抓取任何页面。我的 URI 中没有错字,用 scrapy shell 测试过。
2018-01-04 14:40:14 [scrapy.core.engine] INFO: Spider opened
2018-01-04 14:40:14 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-01-04 14:40:14 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-01-04 14:40:14 [scrapy.core.engine] INFO: Closing spider (finished)
2018-01-04 14:40:14 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'finish_reason': 'finished',
'finish_time': datetime.datetime(2018, 1, 4, 21, 40, 14, 392659),
'log_count/DEBUG': 1,
'log_count/INFO': 7,
'memusage/max': 55623680,
'memusage/startup': 55619584,
'start_time': datetime.datetime(2018, 1, 4, 21, 40, 14, 374933)}
2018-01-04 14:40:14 [scrapy.core.engine] INFO: Spider closed (finished)
【问题讨论】:
-
你不应该在那里有
file://URI...这是一个解释什么是文件URI的链接:en.wikipedia.org/wiki/File_URI_scheme你应该使用一个匹配你的本地文件 -
是的...我在我的代码中放入了正确的文件结构,并且在使用 scrapy shell 进行测试时,它起作用了。
标签: python html scrapy screen-scraping parsel