爬取摩拜單車的車輛定位信息

需要注意的地方就是添加請求頭,scrapy使用帶有表單數據請求的方式,spider文件如下:

# -*- coding: utf-8 -*-
import scrapy
import csv
import json

class MobickSpider(scrapy.Spider):
    name = 'mobick'
    allowed_domains = ['mobike.com']
    start_urls = ['https://mobike.com']

    def parse(self, response)
		# 通過抓包工具找到摩拜單車的數據傳輸接口
        url = "https://mwx.mobike.com/mobike-api/rent/nearbyBikesInfo.do"
       
        headers = {
            'charset': "utf-8",
            'platform': "4",
            "referer": "https://servicewechat.com/wx40f112341ae33edb/1/",
            'content-type': "application/x-www-form-urlencoded",
            'user-agent': "MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN",
            'host': "mwx.mobike.com",
            'connection': "Keep-Alive",
            'accept-encoding': "gzip",
            'cache-control': "no-cache",
        }

        # 讀取本地經緯度,本地的經緯度是通過高德地圖開放接口獲取的,可參見上一篇博客
        f = open(r'file_path', 'r')
        datas = csv.reader(f)

        for data in datas:

            longitude = data[2]
            latitude = data[3]
			# 攜帶的表單數據
            payload = {"latitude": str(latitude),
                       "longitude": str(longitude),
                       "errMsg": "getMapCenterLocation"}

            yield scrapy.FormRequest(
                url=url,
                headers=headers,
                formdata=payload,
                meta={'item': data},
                callback=self.parse_data
            )

        f.close()

    def parse_data(self, response):
        item = response.meta.get('item')
        car_data = json.loads(response.text)
        if car_data is not None:
            print(item)
            yield car_data
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章