Heim >Backend-Entwicklung >Python-Tutorial >Wie crawlt ein Python-Crawler die von get angeforderten Seitendaten? (mit Code)
Der Inhalt dieses Artikels handelt davon, wie der Python-Crawler die von get (mit Code) angeforderten Seitendaten crawlt. Ich hoffe, dass er für Sie hilfreich ist.
1.urllib-Bibliothek
urllib ist eine Bibliothek, die mit Python für Crawler geliefert wird. Ihre Hauptfunktion besteht darin, den Browser zu simulieren, um Anfragen über Code zu senden. Die am häufigsten verwendeten Submodule sind urllib.request und urllib.parse in Python3 sowie urllib und urllib2 in Python2.
2. Crawler-Programm von einfach bis schwierig:
1. Crawlen Sie alle Datenwerte auf der Baidu-Homepage
#!/usr/bin/env python # -*- coding:utf-8 -*- #导包 import urllib.request import urllib.parse if __name__ == "__main__": #指定爬取的网页url url = 'http://www.baidu.com/' #通过urlopen函数向指定的url发起请求,返回响应对象 reponse = urllib.request.urlopen(url=url) #通过调用响应对象中的read函数,返回响应回客户端的数据值(爬取到的数据) data = reponse.read()#返回的数据为byte类型,并非字符串 print(data)#打印显示爬取到的数据值。
#Ergänzende Anweisungen
Urlopen-Funktionsprototyp:
urllib.request.urlopen(url, data=None, timeout=<object object at 0x10af327d0>, *, cafile=None, capath=None, cadefault=False, context=None)
Im obigen Fall haben wir nur die erste Parameter-URL in der Funktion verwendet. In der täglichen Entwicklung können wir nur zwei Parameter verwenden: URL und Daten.
URL-Parameter: Geben Sie an, an welche URL eine Anfrage initiiert werden soll.
Datenparameter: Sie können die in der Post-Anfrage enthaltenen Parameter in ein Wörterbuch kapseln und an diesen Parameter übergeben (kein Verständnis erforderlich). vorerst werden wir später darüber sprechen) )
Das von der Urlopen-Funktion zurückgegebene Antwortobjekt, Einführung in den zugehörigen Funktionsaufruf:
response.headers(): Ruft die Antwort-Header-Informationen ab
response.getcode(): Ruft den Antwortstatuscode ab
response.geturl(): Ruft die angeforderte URL ab
response.read(): Ruft den Datenwert (Bytetyp) in der Antwort ab
2. Schreiben Sie den gecrawlten Datenwert auf die Baidu-News-Homepage. Geben Sie die Datei zur Speicherung ein : Die URL muss ein ASCII-codierter Datenwert sein. Wenn wir also die URL in den Crawler-Code schreiben und die URL einen nicht ASCII-codierten Datenwert enthält, muss dieser ASCII-codiert werden, bevor die URL verwendet werden kann.
Fall: Crawlen Sie die von Baidu gesuchten Seitendaten basierend auf dem angegebenen Begriff (z. B. Crawlen Sie die Seitendaten mit dem Begriff „Jay Chou“)
#!/usr/bin/env python # -*- coding:utf-8 -*- import urllib.request import urllib.parse if __name__ == "__main__": url = 'http://news.baidu.com/' reponse = urllib.request.urlopen(url=url) #decode()作用是将响应中字节(byte)类型的数据值转成字符串类型 data = reponse.read().decode() #使用IO操作将data表示的数据值以'w'权限的方式写入到news.html文件中 with open('./news.html','w') as fp: fp.write(data) print('写入文件完毕')
5. Durch Anpassen des Anforderungsobjekts , Wird verwendet, um die vom Crawler angeforderte Identität zu verschleiern.
Bei der Erläuterung allgemeiner http-Anfrage-Header-Informationen haben wir zuvor den User-Agent-Parameter erläutert, der als UA bezeichnet wird. Die Funktion dieses Parameters besteht darin, die Identität des Anfrageträgers anzugeben. Wenn wir eine Anfrage über einen Browser initiieren, ist der Träger der Anfrage der aktuelle Browser und der Wert des UA-Parameters gibt eine Datenzeichenfolge an, die durch die Identität des aktuellen Browsers dargestellt wird. Wenn wir eine von einem Crawler-Programm initiierte Anfrage verwenden, ist der Träger der Anfrage das Crawler-Programm und die UA der Anfrage ist eine Datenfolge, die durch die Identität des Crawler-Programms dargestellt wird. Einige Websites ermitteln, ob es sich bei dem angeforderten Träger um ein Crawler-Programm handelt, indem sie das angeforderte UA identifizieren. Wenn es sich um ein Crawler-Programm handelt, wird keine Antwort auf die Anfrage zurückgegeben und unser Crawler-Programm kann die Website nicht durch die Anfrage crawlen. Datenwert, dies ist auch ein primäres technisches Mittel zum Anti-Crawling. Um das Auftreten dieses Problems zu verhindern, können wir die UA des Crawler-Programms als Identität eines bestimmten Browsers tarnen.
Im obigen Fall haben wir die Anfrage über urlopen im Anfragemodul initiiert. Das Anfrageobjekt ist das in urllib erstellte Standardanfrageobjekt und wir können es nicht über UA ändern. urllib bietet uns auch eine Möglichkeit, das Anforderungsobjekt anzupassen. Wir können die UA im Anforderungsobjekt verschleiern (ändern), indem wir das Anforderungsobjekt anpassen.
#!/usr/bin/env python # -*- coding:utf-8 -*- import urllib.request import urllib.parse #如下两行代码表示忽略https证书,因为下面请求的url为https协议的请求,如果请求不是https则该两行代码可不用。 import ssl ssl._create_default_https_context = ssl._create_unverified_context if __name__ == "__main__": #url是https协议的 url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1536918978042&di=172c5a4583ca1d17a1a49dba2914cfb9&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2F0dd7912397dda144f04b5d9cb9b7d0a20cf48659.jpg' reponse = urllib.request.urlopen(url=url) data = reponse.read()#因为爬取的是图片数据值(二进制数据),则无需使用decode进行类型转换。 with open('./money.jpg','wb') as fp: fp.write(data) print('写入文件完毕')
Verwandte Empfehlungen:
Python-Crawler-Betaversion zum Crawlen einer einzelnen Zhihu-SeitePython-Crawler-Tool-Listen-Enzyklopädie
Das obige ist der detaillierte Inhalt vonWie crawlt ein Python-Crawler die von get angeforderten Seitendaten? (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!