js混淆爬蟲天氣網(wǎng)的方法是什么

本篇內(nèi)容介紹了“js混淆爬蟲天氣網(wǎng)的方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、建華網(wǎng)絡(luò)推廣、成都小程序開發(fā)、建華網(wǎng)絡(luò)營銷、建華企業(yè)策劃、建華品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供建華建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:bm7419.com

混淆加密網(wǎng)站

 今天在爬取污染物時遇到下面網(wǎng)站,總的來說碰到了兩大方面的爬蟲難題。(混淆加密和debug檢測)。

待爬取的網(wǎng)站 js混淆爬蟲天氣網(wǎng)的方法是什么

數(shù)據(jù)獲取

  1. 一開始就遇到右鍵禁用,debug檢測。 js混淆爬蟲天氣網(wǎng)的方法是什么

    沒辦法,ctrl+s,直接把網(wǎng)站保存到了本地。

  2. 這樣可以f12了,找到主頁面,一通找,找到了ajax請求的代碼。 js混淆爬蟲天氣網(wǎng)的方法是什么

    傳入城市、月份,然后調(diào)js中的方法,接著ctrl+shift+f,全局搜索這玩意。 js混淆爬蟲天氣網(wǎng)的方法是什么

  3. 復(fù)制到本地一看,好么,js混淆,找了個反混淆js。 js混淆爬蟲天氣網(wǎng)的方法是什么

  4. 復(fù)制到本地,一通ctrl+c,終于找到下列代碼,一看邏輯,先加密傳入的參數(shù),在post請求,獲取加密后的結(jié)果,在解密結(jié)果。 js混淆爬蟲天氣網(wǎng)的方法是什么

  5. 理清思路,終于可以寫代碼了。

  6. 注意一下,每個人的加密參數(shù)(或者隔一段時間)不一樣,所以大家復(fù)制我的不一定后面能跑,自己可以使用這套路獲取自己的js。 js混淆爬蟲天氣網(wǎng)的方法是什么

python代碼

# -*- coding: utf-8 -*-
import execjs
import json
import requests
import datetime


class pollutionSpider:
    """
    爬取https://www.aqistudy.cn/historydata/daydata.php 污染物數(shù)據(jù)
    """

    def __init__(self):
        self.js_path = "../data/aqistudy.js"
        self.main_url = 'https://www.aqistudy.cn/historydata/api/historyapi.php'
        self.month_data = {"1": "01", "2": "02", "3": "03", "4": "04", "5": "05", "6": "06", "7": "07", "8": "08",
                           "9": "09", "10": "10", "11": "11", "12": "12"}
        self.save_path = "../data/weather/"
        self.headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.8',
            'Content-Type': 'application/x-www-form-urlencoded',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/71.0.3578.80 Safari/537.36 '
        }
        self.data_headers = "time_point	aqi	pm2_5	pm10	so2	no2	co	o3	rank	quality"

    def encrypt(self, city, month):
        """
        加密信息
        """
        js_str = self.get_js()
        ctx = execjs.compile(js_str)  # 加載JS文件
        return ctx.call('pLoXOmdsuMMq', "GETDAYDATA", {"city": city, "month": month})

    def decrypt(self, data):
        """
        解密信息
        """
        ctx = execjs.compile(self.get_js())  # 加載JS文件
        return ctx.call('dSMkMq14l49Opc37Yx', data)

    def get_js(self):
        """
        獲取js
        """
        f = open(self.js_path, 'r', encoding='utf-8')  # 打開JS文件
        line = f.readline()
        html_str = ''
        while line:
            html_str = html_str + line
            line = f.readline()
        return html_str

    def get_response(self, params):
        """
        請求數(shù)據(jù)
        """
        return requests.post(self.main_url, data={'hzbDyDmL0': params}, headers=self.headers).text

    def get_single(self, city, month):
        """
        獲取一個城市某個月的數(shù)據(jù)
        """
        encrypt_data = self.get_response(self.encrypt(city, month))
        data = json.loads(self.decrypt(encrypt_data))['result']['data']['items']
        result = ['\t'.join([str(value) for key, value in element.items()]) for element in data]
        return result

    def get_all(self, city, start_day):
        """
        獲取一個城市污染數(shù)據(jù)
        """
        print("開始獲取" + city + "數(shù)據(jù)------------------------")
        start_day = datetime.datetime.strptime(start_day, "%Y-%m-%d")
        end_day = datetime.datetime.now()
        months = (end_day.year - start_day.year) * 12 + end_day.month - start_day.month
        month_range = ['%s%s' % (start_day.year + mon // 12, self.month_data[str(mon % 12 + 1)]) for mon in
                       range(start_day.month - 1, start_day.month + months)]
        f = open(self.save_path + city + ".txt", "w", encoding="utf8")
        f.write(self.data_headers + "\n")
        for element in month_range:
            try:
                data = self.get_single(city, element)
                for line in data:
                    f.write(line + "\n")
                print(element + city + "數(shù)據(jù)獲取------------------------成功")
            except Exception as e:
                print(e)
                print(element + city + "數(shù)據(jù)獲取------------------------失敗")
        f.close()


if __name__ == '__main__':
    pollutionSpider().get_all("上海", "2015-1-1")

結(jié)果

js混淆爬蟲天氣網(wǎng)的方法是什么

“js混淆爬蟲天氣網(wǎng)的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站名稱:js混淆爬蟲天氣網(wǎng)的方法是什么
鏈接URL:http://bm7419.com/article20/jcehjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作、網(wǎng)站設(shè)計公司微信公眾號、App開發(fā)做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營