【问题标题】:Include Image src to LinkExtractor Scrapy CrawlSpider将图像 src 包含到 LinkExtractor Scrapy CrawlSpider
【发布时间】:2017-11-14 10:42:29
【问题描述】:

我正在对网站进行爬网,我正在使用来自 scrapy 的 LinkExtractor 来爬网链接并确定其响应状态。

此外,我还想使用链接提取器从站点获取图像 src。我有一个代码,它适用于网站网址,但我似乎无法获取图像。因为它不会登录控制台。

handle_httpstatus_list = [404,502]
# allowed_domains = [''mydomain']

start_urls = ['somedomain.com/']

http_user = '###'
http_pass = '#####'

rules = (
    Rule(LinkExtractor(allow=('domain.com',),canonicalize = True, unique = True), process_links='filter_links', follow = False, callback='parse_local_link'),
    Rule(LinkExtractor(allow=('cdn.domain.com'),tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link'),
)

def filter_links(self,links):
    for link in

def parse_local_link(self, response):
    if response.status != 200:
        item = LinkcheckerItem()
        item['url'] = response.url
        item['status'] = response.status
        item['link_type'] = 'local'
        item['referer'] = response.request.headers.get('Referer',None)
        yield item

def parse_image_link(self, response):
    print "Got image link"
    if response.status != 200:
        item = LinkcheckerItem()
        item['url'] = response.url
        item['status'] = response.status
        item['link_type'] = 'img'
        item['referer'] = response.request.headers.get('Referer',None)
        yield item

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    如果有人有兴趣继续使用 CrawlSpiderLinkExtractors,只需添加 kwarg deny_extensions,即替换:

        Rule(LinkExtractor(allow=('cdn.domain.com'),tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link'),
    

        Rule(LinkExtractor(allow=('cdn.domain.com'),deny_extensions=set(), tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link')
    

    不设置此参数时,默认为scrapy.linkextractors.IGNORED_EXTENSIONS,包含jpeg、png等扩展名。这意味着链接提取器会避免找到包含所述扩展名的链接。

    【讨论】:

      【解决方案2】:

      我已经使用 Scarpy 2 年多了,我总是使用 start_requests() 方法开始抓取 URL,而不是 start_urlsLinkExtractor

      不要被上面弄糊涂了,直接用这个

      class MySpider(scrapy.Spider):
          name = "myspider"
      
          def start_requests(self):
      
              urls_to_scrape = ["abc.com", "abc.com2"]
      
              for url in urls_to_scrape:
      
                  yield Request(url=url, callback=self.my_callback)
      
      
          def my_callback(self, response):
      
              for img in response.css("img"):
      
                  image_here = img.css("::attr(src)").extract_first()
      

      【讨论】:

      • 这是个好主意。我真的只是想尝试一下scrapy的CrawlSpider功能。另一方面,是否有类似的方式从页面中获取所有链接或href?
      • 是的,当前代码正在抓取所有 img 标签,您可以使用任何选择器从给定页面抓取任何内容
      • 嗯,您知道如何实现回调以抓取我网站的所有可能网址并检查是否有错误吗?
      • 哦,这实际上解决了我从网站获取所有图片链接的问题。谢谢!
      猜你喜欢
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2014-12-31
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      相关资源
      最近更新 更多