Python (Crawler-Zeitalter) – Crawler-Entwicklung 01

Grundkonzepte von Crawlern

Definition von Crawler

  • Webcrawler (sogenannteWeb Spiders, Web Robots) sind simulierte Clients, die Netzwerkanfragen senden a>, Empfangen einer Anfrageantwort, ein Programm, das automatisch Internetinformationen nach bestimmten Regeln erfasst

  • Im Allgemeinen kann der Crawler alles tun, solange der Browser alles kann

Klassifizierung von Crawlern

  • Universeller Crawler: bezieht sich normalerweise auf einen Suchmaschinen-Crawler

  • Aggregations-Crawler: Ein Crawler, der auf bestimmte Websites oder bestimmte Webseiten abzielt

ROBOTS-Vereinbarung

  • Robots-Protokoll: Auch robots.txt (einheitlich in Kleinbuchstaben) genannt, ist eine ASCII-codierte Textdatei, die im Stammverzeichnis der Website gespeichert ist. Sie informiert normalerweise über das Roaming der Netzwerksuche Suchmaschinen (auch bekannt als Web Spider), welche Inhalte auf dieser Website nicht von Suchmaschinen-Robots abgerufen werden sollten und welche Inhalte von Robotern abgerufen werden können

  • Wenn Sie sich eine Website wie ein Zimmer in einem Hotel vorstellen, ist robots.txt das „Bitte nicht stören“- oder „Welcome to Clean“-Schild, das der Eigentümer an der Zimmertür aufhängt. Diese Datei teilt den besuchenden Suchmaschinen mit, welche Räume betreten und besucht werden können und welche Räume für Suchmaschinen nicht zugänglich sind, weil sie Wertgegenstände aufbewahren oder die Privatsphäre von Bewohnern und Besuchern gefährden könnten. Aber robots.txt ist weder ein Befehl noch eine Firewall, genauso wie ein Gatekeeper Diebe und andere böswillige Eindringlinge nicht verhindern kann
     

Beispiel:

  • Zugriff auf die Robots-Datei von Taobao: https://www.taobao.com/robots.txt

    • Offensichtlich erlaubt Taobao den Robotern von Baidu nicht, auf alle Verzeichnisse seiner Website zuzugreifen.

    • Wenn der gesamte Linkzugriff erlaubt ist, sollte es sein:Zulassen: /

Das Konzept von http und https

  • http

    • Hypertext Transfer Protocol

    • Standard-Portnummer: 80

  • https

    • HTTP+SSL (Secure Socket Layer)

    • Standardportnummer: 443

  • HTTPS ist sicherer als HTTP, weist jedoch eine geringere Leistung auf

URL-Formular

  • sheme://host[:port#]/path/.../[?query-string][#anchor]

    • Schema: Protokoll (zum Beispiel: http, https, ftp)

    • host: Server-IP-Adresse/Domänenname

    • Port: Server-Portnummer

    • Pfad: Pfad zum Zugriff auf Ressourcen

    • Abfragezeichenfolge: Anforderungsparameter

    • Anker: Anker (zur angegebenen Ankerposition der Webseite springen)

    • Beispiel: http://item.jd.com/100008959687.html#product-detail

Allgemeine HTTP-Anfrageheader

  • Host (Host- und Portnummer)

  • Verbindung (Linktyp)

  • Upgrade-insecure-Requests (Upgrade auf https-Anfragen)

  • User-Agent (Browsername)

  • Akzeptieren (Dateityp übertragen)

  • Referrer (Seitensprungpunkt)

  • Accept-Encoding (Dateikodierungs- und -dekodierungsformat)

  • Plätzchen

  • x-requested-with:XMLHttpRequest (asynchrone Ajax-Anfrage)

Allgemeine HTTP-Antwortcodes

  • 200: Erfolg

  • 302: Temporäre Weiterleitung zur neuen URL

  • 404: Der angeforderte Pfad kann nicht gefunden werden

  • 500: Interner Serverfehler

Modul „Anfragen“.

offizielle Website der Anfragen

  • https://docs.python-requests.org/zh_CN/latest/index.html

Beispiel: Laden Sie Bilder von der offiziellen Website herunter

import requests

url="https://docs.python-requests.org/zh_CN/latest/_static/requests-sidebar.png"
response=requests.get(url)

# 响应状态码为200,表示请求成功
if response.status_code==200:
    # 生成图片
    with open("aa.png","wb") as f:
        f.write(response.content)

Der Unterschied zwischen Response.text und Response.content

  • Antworttext

    • Typ: str

    • Decodierungstyp: Machen Sie eine fundierte Vermutung über die Codierung der Antwort basierend auf http-Headern und spekulativer Textcodierung

    • So ändern Sie die Kodierung: Response.encoding='gbk'

  • Antwort.Inhalt

    • Typ: Bytes

    • Dekodierungstyp: nicht angegeben

    • Methode zum Ändern der Codierung: Response.content.decode('utf-8')

Anfragen-Anfrage mit Header

  • Es simuliert hauptsächlich den Browser, täuscht den Server und erhält mit dem Browser konsistente Inhalte.

  • Die Datenstruktur des Headers ist ein Wörterbuch

Beispiel

import requests

respons=requests.get("http://www.baidu.com")
print(respons.request.headers)

# 设置header 模拟谷歌浏览器
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
respons2=requests.get("http://www.baidu.com",headers=headers)
print(respons2.request.headers)

Holen Sie sich den Wert von User-Agent

Anfragen mit Parametern

import requests

url="http://www.baidu.com/s?"
# 添加参数
params={
    "wd":"hello"
}

# 方式一
respons=requests.get(url,params=params)
# 方式二
respons2=requests.get("http://www.baidu.com/s?wd={}".format("hello"))

print(respons.status_code)
print(respons.request.url)
print(respons2.status_code)
print(respons2.request.url)

AnfragenSenden Sie eine Post-Anfrage

  • Grammatik

    • Response=requests.post("http://www.baidu.com/",data=data,headers=headers)

    • Die Datenstruktur der Daten ist ein Wörterbuch

  • Beispiel

import requests

url="https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1617719326771"
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}

params={
    "curr_iss_amt": 20
}

respons=requests.post(url,data=params,headers=headers)
print(respons.content.decode())


Anfragen verwenden den Proxy-Modus

  • Gründe für die Verwendung eines Proxys

    • Lassen Sie den Server denken, dass es sich nicht um dieselbe Clientanforderung handelt

    • Verhindern Sie, dass unsere echte Adresse durchsickert und zur Verantwortung gezogen wird

  • Grammatik

    • requetst.get("http://www.baidu.com",proxies=proxies)

    • Proxy-Datenstrukturwörterbuch

    • proxies={ "http":"http://12.33.34.54:8374","https":"https://12.33.34.54:8374" }

  • Beispiel

import requests

url="http://www.baidu.com"
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}

proxies={
    "http": "175.42.158.211:9999"
}
respons=requests.post(url,proxies=proxies)
print(respons.status_code)


 

Der Unterschied zwischen Cookies und Sitzungen

  • Die Cookie-Daten werden im Browser des Kunden gespeichert und die Sitzungsdaten werden auf dem Server gespeichert.

  • Cookies sind nicht sehr sicher. Andere können lokal gespeicherte Cookies analysieren und Cookie-Spoofing betreiben.

  • Die Sitzung wird für einen bestimmten Zeitraum auf dem Server gespeichert. Wenn der Zugriff zunimmt, wird mehr Serverleistung verbraucht.

  • Die von einem einzelnen Cookie gespeicherten Daten dürfen 4 KB nicht überschreiten und viele Browser beschränken die Speicherung einer Website auf bis zu 20 Cookies.

Der Crawler verarbeitet Cookies und Sitzungen

  • Die Vorteile des Mitbringens von Cookies und Sitzungen

    • Die Seite kann nach dem Login angefordert werden

  • Nachteile des Mitbringens von Cookies und Sitzungen

    • Eine Reihe von Cookies und Sitzungen entsprechen häufig einem Benutzer. Wenn die Anfrage zu schnell ist und die Anzahl der Anfragen zu groß ist, kann der Server sie leicht als Crawler identifizieren.

  • Wenn Sie keine Cookies benötigen, versuchen Sie, diese nicht zu verwenden.

Anfragen verarbeitet Cookies und Sitzungsanfragen

  • reqeusts stellt eine Sitzungsklasse bereit, um die Sitzung zwischen dem Client und dem Server aufrechtzuerhalten.

  • Anweisungen

    • Instanziieren Sie ein Sitzungsobjekt

    • Lassen Sie die Sitzung eine Get- oder Post-Anfrage senden

  • Grammatik

    • session=requests.session()

    • Response=session.get(URL,Header)

  • Beispiel

import requests

headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}

data={
    "email":"用户名",
    "password":"密码"
}

session=requests.session()
# session发送post请求,cookie保存在其中
session.post("http://www.renren.com/PLogin.do",data=data,headers=headers)
# 使用session请求登录后才能访问的页面
r=session.get("http://www.renren.com/976564425",headers=headers)
print(r.content.decode())

Die Aufzeichnung von Programmierern und Investmentleben wurde in Programmierer Zhiqiu umbenannt, was mit dem offiziellen WX-Konto identisch ist. Seien Sie herzlich willkommen, aufmerksam zu sein!

Guess you like

Origin blog.csdn.net/qq_25702235/article/details/130005558