在 python 2.x 环境中使用 Scrapy,我设置了一个爬虫来抓取网页列表,特别是查看是否有任何页面产生错误,例如 400/404/500。
我编写了scrapy 项目,目的是通过管道将所有抓取的结果存储在mysql 数据库中。它有效!我能够成功写入我的数据库。但仅限于成功抓取的页面,HTTP 状态代码为 200。
Scrapy 似乎没有通过管道将 404 页上的信息发送到数据库中。
下面是从蜘蛛的代码中提取的,它抓取了两个不存在的网页:
class LandingPage004Spider(scrapy.Spider):
name='LandingPage004Spider'
start_urls = []
def __init__(self):
super(LandingPage004Spider,self).__init__()
#self.start_urls = unique_landingpages
self.start_urls = ['https://www.google.com/doesntexist', 'https://www.google.com/deadpage']
def parse(self, response):
url = response.url
url_title = 'Title goes here.'
pagesize = len(response.body)
HTTP_code = response.status
yield {'url': url, "pagesize": pagesize, "HTTP_code": HTTP_code}
Run Code Online (Sandbox Code Playgroud)
当我运行这个蜘蛛时,我得到以下输出:
[scrapy] DEBUG: Ignoring response <404 https://www.google.com/deadpage>: HTTP status code is not handled or not allowed
[scrapy] DEBUG: Ignoring response <404 https://www.google.com/doesntexist>: HTTP status …Run Code Online (Sandbox Code Playgroud) 我无法尝试回显数组特定部分的每次迭代.
这是线索.我不能把它们拼凑起来(因为我还不太了解php数组).
如果我执行以下操作:
<?php
$audiofile = simple_fields_value("audiofile");
echo $audiofile['url'];
?>
Run Code Online (Sandbox Code Playgroud)
我得到了文件的URL,这就是我想要的.但是,我有四个不同的URL(一个"二维数组",我相信?),我想回应它们中的每一个.
根据Simple Fields文档,我知道我需要将第二行更改为:
$audiofile = simple_fields_values("audiofile");
Run Code Online (Sandbox Code Playgroud)
这导致我改变php如下:
<?php
$audiofile = simple_fields_values("audiofile");
for($i=0;$i<count($audiofile);$i++)
{
echo $audiofile[$i];
}
?>
Run Code Online (Sandbox Code Playgroud)
但这只能回应"ArrayArrayArrayArray".
这是有道理的,因为$ audiofile正在返回一个信息数组,FROM WHICH我只想要['url'].
所以,我尝试了以下内容:
<?php
$audiofile = simple_fields_values("audiofile");
for($i=0;$i<count($audiofile);$i++)
{
echo $audiofile['url'][$i];
}
?>
Run Code Online (Sandbox Code Playgroud)
但那回声无效.
有任何想法吗?