Python基于Scrapy爬虫框架爬取国庆期间携程航班(航班号、起降城市、起降时间)保存为csv表格

在国庆的时候重新练习了一遍scrapy爬虫,发现好多都忘记了,然后复习了一遍,也重温了xpath,最后爬取了携程网的国庆期间所有地区到北京的航班信息,可以为以后学习python的数据分析做做准备,然后就上一些基本的代码。

网址:https://flights.ctrip.com/actualtime/arrive-pek/

import scrapy

class MyspiderItem(scrapy.Item):
    航班号 = scrapy.Field()
    出发机场 = scrapy.Field()
    到达机场 = scrapy.Field()
    起飞时间 = scrapy.Field()
    降落时间 = scrapy.Field()

这个是爬虫存放信息的类,也是最近才发向可以用中文命名,不得不说python的强大,如果还想爬取其他的信息,还是继续定义新的变量就好。

settings.py文件

BOT_NAME = 'mySpider'

SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'

DEFAULT_REQUEST_HEADERS = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}

FEED_EXPORT_ENCODING = 'GBK'

ROBOTSTXT_OBEY = True

这里设置一下代理,还有不遵守爬虫协议,之前因为在settings这个文件配置的不好,出现过错误,导致很长时间没有爬到信息。

itcast.py文件

import scrapy
from items import MyspiderItem

class ItcastSpider(scrapy.Spider):
    name = 'itcast'
    allowed_domains = ['itcast.cn']
    start_urls = ['https://flights.ctrip.com/actualtime/arrive-pek/']

    def parse(self, response):
        for each in response.xpath("//tr[@class='bg_0']"):

            item=MyspiderItem()

            item['航班号']=each.xpath('./td[1]/strong/text()').extract()
            item['出发机场']=each.xpath('./td[2]/text()').extract()
            item['到达机场']=each.xpath('./td[3]/text()').extract()
            item['起飞时间']=each.xpath('./td[4]/text()[1]').extract()
            item['降落时间'] = each.xpath('./td[4]/text()[2]').extract()

            yield item

        new_links=response.xpath('//*[@id="tab1"]/div[2]/div/a[2]/@href').extract()
        if new_links and len(new_links) > 0:
            new_link=new_links[0]
            yield scrapy.Request(new_link,callback=self.parse,dont_filter = True)

这个也就是最重要的文件,爬虫就是通过这个文件的代码来爬取网站信息的。

  • 首先response确定一块路径,这里是 tr class=bg_0 这个标签的内容,所以我们先确定了这一块大区域。
  • 小区域就是通过response确定的xpath中获取更深一层的xpath路径,如果比较熟悉xpath的使用了话,不建议通过谷歌浏览器直接copy xpath,首先可能会出现错误,也不太利于以后的xpath学习。
  • 不要忘记了最后的.extract(),之前吃过这个亏。。。
  • 最后就是翻页操作了,找到网页中下一页的a标签,找到a的xpath路径,直接放入到scrapy.Request中去,不要忘记给dont_filter=true。

最后获取了57页的数据,总共1122条

Python基于Scrapy爬虫框架爬取国庆期间携程航班(航班号、起降城市、起降时间)保存为csv表格_第1张图片
Python基于Scrapy爬虫框架爬取国庆期间携程航班(航班号、起降城市、起降时间)保存为csv表格_第2张图片

你可能感兴趣的:(Python,python,爬虫,scrapy,携程航班)