【问题标题】:Why isn't scrapy finding anything on my local site?为什么scrapy 在我的本地站点上找不到任何东西?
【发布时间】:2021-06-28 16:55:16
【问题描述】:

我有一个在 http://service.localhost:8021 运行的本地站点,我正在尝试从该站点上抓取图像链接 (src attr)。当我抓取它时,它似乎确实可以访问它(当我得到 200 响应时);但没有返回链接。

我的脚本是:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from bs4 import BeautifulSoup
import urllib
class crawlImages(CrawlSpider):
    name = 'crawlImages'
    allowed_domains = ["service.localhost"]
    start_urls = ['http://service.localhost:8021']
    def parse(self, response):

    titles = response.css('img::attr(alt)').extract()
    links = response.css('img::attr(src)').extract()
    print('##########')
    for item in zip(titles, links):
        all_items = {
            'title' : BeautifulSoup(item[0]).text,
            'link' :  item[1]
        }
        print(item[1])
        
        yield all_items

我这样运行它:

scrapy runspider crawlImages.py -s USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36" -s ROBOTSTXT_OBEY=False

我得到的回复:已删除,因为不允许在此处发布。

有什么提示吗?

【问题讨论】:

  • 您的回复是否包含所有这些图片的链接?
  • 呃,不,那太傻了,不是吗。结果中没有列出任何链接。

标签: python scrapy


【解决方案1】:

您可以打印“标题”和“链接”进行调试,但您的函数缩进不正确。

改变

def parse(self, response):

titles = response.css('img::attr(alt)').extract()
links = response.css('img::attr(src)').extract()
print('##########')
for item in zip(titles, links):
    all_items = {
        'title' : BeautifulSoup(item[0]).text,
        'link' :  item[1]
    }
    print(item[1])
    
    yield all_items

def parse(self, response):
    titles = response.css('img::attr(alt)').extract()
    links = response.css('img::attr(src)').extract()
    print('##########')
    for item in zip(titles, links):
        all_items = {
            'title' : BeautifulSoup(item[0]).text,
            'link' :  item[1]
        }
        print(item[1])
        
        yield all_items

使用以下命令检查 response.body:

print(response.body)

尝试重写循环:

def parse(self, response):
    print(response.body)
    for img in response.xpath('//img'):
        title = img.xpath('./@alt').get()
        link = img.xpath('./@src').get()
        item = {}
        item['title'] = title
        item['link'] = link
        print(item)
        yield item

【讨论】:

  • 不知道 Python 对缩进敏感;但是脚本运行所以猜测我有它正确并且只是在上面粘贴错误。我粘贴了你所拥有的,我得到了相同的结果;这是一块 [scrapy.core.engine] 信息:蜘蛛打开 [scrapy.extensions.logstats] 信息:爬网 0 页(以 0 页/分钟),抓取 0 项( 0 项/分钟)[scrapy.extensions.telnet] 信息:Telnet 控制台监听 127.0.0.1:6023 [scrapy.core.engine] 调试:已爬网(200)service.localhost:8021>(引用者:无)[scrapy .core.engine] INFO:关闭蜘蛛(完成)
  • 注释掉 "allowed_domains = ["service.localhost"]" 会发生什么?
  • 我试过注释掉,[],[""] 和其他一些东西.. 没有区别。
  • 你试过注释掉整行吗?将allowed_domains = ["service.localhost"] 更改为#allowed_domains = ["service.localhost"]
  • 这就是我上面所说的:“尝试注释掉”。没什么区别。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
相关资源
最近更新 更多