琢磨着搞一个爬虫监控一下12306固定车次的放票情况。
自己电脑上写完之后跑起来很正常。爬取频率也不高。五分钟爬一次,每次爬的时候依次爬8天的车票情况。每天之间间隔5秒。
在自己电脑上跑了三个小时,数据都是正常的。
遂放到vps上让他自己跑。结果爬回来的就是个错误提示页。没有爬到正常的json数据。
怀疑是ip被封,换了个vps,依然不行。又在路由器上装了个Python,跟电脑用的是同一个网。依然爬不到东西。本人比较菜。网上查了半天也没找到解决办法。。
代码如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
#import email2
from fake_useragent import UserAgent
'''ltrain_date='2018-12-28' #日期
from_station='BXP' #出站
to_station='IOQ' #到站'''
#票型
def get_num(date,from_s,to_s):
url=('https://kyfw.12306.cn/otn/leftTicket/queryZ?'
'leftTicketDTO.train_date={}&'
'leftTicketDTO.from_station={}&'
'leftTicketDTO.to_station={}&'
'purpose_codes=ADULT').format(date,from_s,to_s)
head = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'User-Agent': UserAgent().random,
'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init'
}
with requests.Session() as s:
res = s.get(url,headers = head) #verify=False
res.encoding = "utf-8"
#res = requests.get(url,params=param,headers = head)
#r = res.text.encode('utf-8')
print(res.text)
#print(type(r))
jsons = json.loads(res.text)
data1 = jsons["data"]["result"][2]
data = data1.split("|")
print("{},{},{}".format(data[3],data[28],data[29]))
return data[3],data[28],data[29]
#return res
# 3车次,26无座,28硬卧,29硬座
if __name__ == '__main__':
get_num("2019-01-03","QTP","WFK")
url部分,本来是用的params传入数据,Windows上也没问题。vps的Centos上不行。换成了现在这个样子的。在vps上爬了一组数据就不行了。