在国庆的时候重新练习了一遍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的强大,如果还想爬取其他的信息,还是继续定义新的变量就好。
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这个文件配置的不好,出现过错误,导致很长时间没有爬到信息。
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)
这个也就是最重要的文件,爬虫就是通过这个文件的代码来爬取网站信息的。