【问题标题】:Scraping data from multiple URL从多个 URL 抓取数据
【发布时间】:2014-06-11 18:04:51
【问题描述】:

我希望从 [a link]http://cbfcindia.gov.in/html/SearchDetails.aspx?mid=1&Loc=Backlog 抓取数据! ,但是 MID 参数在 URL 中是递增的,以提供第二个、第三个 URL .....直到 1000 个 URL,那么我该如何处理这个(我是 PYTHON 和 SCRAPY 的新手,所以不要介意我问这个)?

请检查我用来提取信息的 XPATH,它没有获取任何输出,蜘蛛中是否存在基本错误

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from movie.items import MovieItem

class MySpider(BaseSpider):
    name = 'movie'
    allowed_domains= ["http://cbfcindia.gov.in/"]
    start_urls = ["http://cbfcindia.gov.in/html/SearchDetails.aspx?mid=1&Loc=Backlog"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.select("//body")    #Check
        print titles
        items = []
        for titles in titles:
          print "in FOR loop"
          item = MovieItem()
                  item ["movie_name"]=hxs.xpath('//TABLE[@id="Table2"]/TR[2]/TD[2]/text()').extract()
          print "XXXXXXXXXXXXXXXXXXXXXXXXX  movie name:", item["movie_name"]
          item ["movie_language"] = hxs.xpath('//*[@id="lblLanguage"]/text()').extract()
          item ["movie_category"] = hxs.xpath('//*[@id="lblRegion"]/text()').extract()
          item ["regional_office"] = hxs.xpath('//*[@id="lblCertNo"]/text()').extract()
          item ["certificate_no"] = hxs.xpath('//*[@id="Label1"]/text()').extract()
          item ["certificate_date"] = hxs.xpath('//*@id="lblCertificateLength"]/text()').extract()
          item ["length"] = hxs.xpath('//*[@id="lblProducer"]/text()').extract()
          item ["producer_name"] = hxs.xpath('//*[@id="lblProducer"]/text()').extract()

          items.append(item)

          print "this is ITEMS"
        return items

以下是日志:

log>
    {'certificate_date': [],
     'certificate_no': [],
     'length': [],
     'movie_category': [],
     'movie_language': [],
     'movie_name': [],
     'producer_name': [],
     'regional_office': []}
2014-06-11 23:20:44+0530 [movie] INFO: Closing spider (finished)
214-06-11 23:20:44+0530 [movie] INFO: Dumping Scrapy stats:
    {'downloader/request_bytes': 256,
     'downloader/request_count': 1,
     'downloader/request_method_count/GET': 1,
     'downloader/response_bytes': 6638,
     'downloader/response_count': 1,
     'downloader/response_status_count/200': 1,
     'finish_reason': 'finished',
     'finish_time': datetime.datetime(2014, 6, 11, 17, 50, 44, 54000),
     'item_scraped_count': 1,
     'log_count/DEBUG': 4,
     'log_count/INFO': 7,
     'response_received_count': 1,
     'scheduler/dequeued': 1,
     'scheduler/dequeued/memory': 1,
     'scheduler/enqueued': 1,
     'scheduler/enqueued/memory': 1,
     'start_time': datetime.datetime(2014, 6, 11, 17, 50, 43, 681000)}

【问题讨论】:

  • 我可以使用下面的代码来创建一个 START_URLS 列表,但是我想为 i in range(1,1000) 这样做,这会产生任何问题吗?但是,我无法抓取数据,ITEMS 仍然为空 start_urls = [] for i in range(1,10): url = 'cbfcindia.gov.in/html/SearchDetails.aspx?mid=' + str(i) + '&Loc=Backlog' start_urls.append(网址)

标签: python web-scraping scrapy scrapy-spider


【解决方案1】:

除了@Talvalin 的回答,正确的 XPath 应该是以下形式:

item["movie_name"] = hxs.xpath("//*[@id='lblMovieName']/font/text()").extract()

由于某种原因,当页面加载时,<font> 标记与<span> 标记(或id 所在的任何标记)分离。我已经对此进行了测试,并且可以正常工作。

不过,请注意:该网站几乎受到保护,不会被抓取。我尝试运行第二次抓取,它立即抛出了Runtime Error

【讨论】:

    【解决方案2】:

    在定义允许的域时不应使用http://。例如:

    allowed_domains= ["cbfcindia.gov.in/"]

    如果任何问题仍然存在,请显示完整日志,其中包含已抓取页面的详细信息以及可能发生的任何重定向。

    【讨论】:

    • 域应该没有斜杠
    猜你喜欢
    • 2015-01-15
    • 2021-06-20
    • 2016-12-17
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多