我怎样才能从刮back中得到正确的回应?

时间:2019-03-24 20:44:07

标签: python web-scraping scrapy

我正在尝试从该公司注册簿中抓取一些搜索结果,但是当我尝试抓取公司名称时,我的搜索结果似乎无法正确返回,就像公司名称项被分成基于搜索关键字的2个html项一样

有没有办法将它们结合在一起?这是我的蜘蛛

import scrapy

class QuotesSpider(scrapy.Spider):

name = 'gov2'
start_urls = ['https://beta.companieshouse.gov.uk/search/companies?q=a']

def parse(self, response):

for i in response.css('ul.results-list'):
  yield {
      'company_name': i.css('li.type-company h3 a::text').extract(),
      'address': i.css('li.type-company p::text').extract(),
  }

我的结果如您所见,它缺少一些部分。.enter image description here

希望你们中的任何人都知道发生了什么事。谢谢!

2 个答案:

答案 0 :(得分:1)

如我所见,您想获取ap标签中的所有文本,并且此标签中有很多tags

尝试此操作,并通过regex删除不必要的空格:

import scrapy
import re

class QuotesSpider(scrapy.Spider):

    name = 'gov2'
    start_urls = ['https://beta.companieshouse.gov.uk/search/companies?q=a']

    def parse(self, response):

      for i in response.css('ul.results-list'):
         yield {
          'company_name': re.sub('\s+',' ',''.join(i.css('li.type-company h3 a ::text').extract())),
          'address': re.sub('\s+',' ',''.join(i.css('li.type-company p ::text').extract())),
      }

答案 1 :(得分:1)

使用正则表达式,只需修改代码即可获得更好的输出。

import re
import scrapy


class QuotesSpider(scrapy.Spider):
  name = 'gov2'
  start_urls = ['https://beta.companieshouse.gov.uk/search/companies?q=a']

    def parse(self, response):
      for i in response.css('.type-company'):
        yield {
            'company_name': re.sub('\s+', ' ', ''.join(i.css('h3 a ::text').extract())),
            'address': re.sub('\s+', ' ', ''.join(i.css('p ::text').extract())),
        }