python3 Web-Crawler entwickelt Kampf kriechen Schlagzeilen Straße schießen Bilder von heute

2020.02.17 die
letzte Computer ist kaputt, ich drei Monate des armen kleinen neuen pro13 ah gerade gekauft, um die Anzeige nicht in Frage. Ich weiß nicht , wo gebrochen ist, einen schwarzen Bildschirm geöffnet, wird die Anzeige in einem bestimmten Winkel nur Licht zeigen (den Winkel der andere ist eigentlich die dunkelsten Helligkeit, liegt an der Spitze kann den Umriss vage, Honig Ausgabe) zeigen, dass die meisten Dinge , die ich ein schwereres Unterdrückungs die linke untere Ecke des Computers verwenden , die Position der linken Hand ist, dann ist es relativ normal angezeigt? ? ? Wirklich verstehe ich nicht , was das Problem ist, aber die Zukunft von Lenovo Computern auf Armlänge jetzt. Vor kurzem wegen der Epidemie, ist Lenovo Aftermarket nicht die Tür zu öffnen, Pilze.
Nun, sagte eine Menge des Lernprozesses rein ist Missstände zu entlüften, der Computer macht mich hart.
Habe nur kriechen Reptilien reales Bild von Schlagzeilen Code - Vervollständigung von heute entwickeln, fanden wir , dass einige Websites ändern, die das Buch des Codes ist nicht gecrawlt werden. Es gibt zwei wichtige Änderungen, 1) Ajax - Request nachzumachen kriechen Bilder Cookie benötigen; 2) json zurück Inhalt variiert, und es gibt keine image_detail Feld. Im Folgenden sind spezifische Inhalte

1) In das Cookie
das Cookie xhr erste Seite Anfrage auf der Straße schießen kann in bekommen
Hier hat Bild einfügen Beschreibungund, bevor die erste Anforderung xhr dort sehen kann ein Antwortfeld img Anfrage ist das Cookie zu setzen, und abgelaufen eine lange Zeit, abgelaufen auf sie kopieren sie es noch einmal das Cookie besuchen.
Also, mit Header nach Setzen eines Cookies wie folgt.

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
    "Referer":"https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D",
    "X-Requested-With":"XMLHttpRequest",
    "Cookie":"__tasessionId=da6dc6d4q1581851848391; s_v_web_id=k6oxqyas_VGn20UCx_WXjQ_40eQ_9nhD_h0a5HUmjAsyD; csrftoken=cdcf90d6d3d490ab1326e261b2eff18a; tt_webid=6794001919121065486"
}

2) die Format zurückgegeben json Inhaltsänderung
nicht image_detail in Datenfeldern, ein Feld image_list, aber nicht in dem Datenfeld jeweils image_list

Spezifischer Code:
Code - Abschnitt ist in drei Teile unterteilt, Hauptfunktion; get_one_page Funktionen: Erfassen von Daten in einem json Offset - Bereich, und Rücklauf, die ein Generator, können in Haupttraverse; save_img Funktion: img vom Erbauer erhalten Informationen und die uRL speichern

import requests, json, time,os
from lxml import etree
from requests import RequestException
from hashlib import md5

base_url1 = "https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset="
base_url2 = "&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp="
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
    "Referer":"https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D",
    "X-Requested-With":"XMLHttpRequest",
    "Cookie":"__tasessionId=da6dc6d4q1581851848391; s_v_web_id=k6oxqyas_VGn20UCx_WXjQ_40eQ_9nhD_h0a5HUmjAsyD; csrftoken=cdcf90d6d3d490ab1326e261b2eff18a; tt_webid=6794001919121065486"
}
base_save_path = "D:/toutiao/" 

def get_one_page(base_url:str)->dict:
    '''
    @base_url: request url
    @return: nop
    '''

    try:
        resp = requests.get(base_url, headers = headers)
    except RequestException:
        return None

    json_content = resp.json()
    
    print(base_url, '\n')
    # print(json.dumps(json_content, indent=2, ensure_ascii=False))
    data = json_content.get("data")
    for item in data:
        title = item.get("title")
        imgs = item.get("image_list")
        if (imgs):
            title_img = {}
            title_img["title"] = title
            title_img["image_list"] = imgs
            yield title_img

        else:
            continue

def save_img(title_img: dict):
    title = title_img.get("title")
    title_path = base_save_path +title
    if not os.path.exists(title_path):
        os.mkdir(title_path)
    for img in title_img.get("image_list"):
        img_url = img.get("url")
        img_resp = requests.get(img_url)
        if img_resp.status_code == 200:
            file_path = '{0}{1}.{2}'.format(title_path + '/', md5(img_resp.content).hexdigest(), 'jpg')
            if not os.path.exists(file_path):
                with open(file_path,'wb') as img_f:
                    img_f.write(img_resp.content)
            else:
                print("already downloaded :", file_path)
        
def main():
    for i in range(0, 120, 20):
        base_url = base_url1 + str(i) + base_url2 + str(time.time()).replace('.','')[:-4]
        title_imgs = get_one_page(base_url)
        for title_img in title_imgs:
            save_img(title_img)

        time.sleep(1)

if __name__ == "__main__":
    main()






Veröffentlicht 15 Originalarbeiten · erntete Lob 3 · Ansichten 10000 +

Ich denke du magst

Origin blog.csdn.net/biziwaiwai/article/details/104366762
Empfohlen
Rangfolge