table des matières
Code commun du robot d'exploration Python
Fondation Web:
Les données contenues dans les en-têtes de réponse sont le contenu envoyé par le navigateur au site Web, y compris les informations du navigateur et les cookies.
état: 200 chenilles 418 normales orz une fois trouvé
(Le package est requis lorsque 418 (User-Agent est détaillé dans le texte suivant))
Demander le code principal:
En python3, urllib a été intégré à la bibliothèque urllib2, il suffit d'importer urllib
import urllib.request
response = urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode("utf-8"))
decode peut le décoder en un texte facile à parcourir.
Liés au POST:
Sites de test pour les articles couramment utilisés:
Poster un test de données (en utilisant des octets pour les convertir en fichiers binaires) (simulation de la connexion d'un utilisateur réel (cookies))
import urllib.request,urllib.parse
if __name__ == '__main__':
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
response = urllib.request.urlopen("http://httpbin.org/post",data = data)
print(response.read().decode("utf-8"))
N'oubliez pas d'utiliser try ... sauf urllib.error.URLError: pour implémenter la gestion des erreurs de timeout (couramment utilisé)
data = bytes(urllib.parse.urlencode({"hello": "world"}), encoding="utf-8")
try:
req = urllib.request.Request("http://douban.com", data=data, headers=headers, method="POST")
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
Opération anti-418: (également un exemple de la combinaison de requête et de réponse, utilisez request pour obtenir l'instance de requête avec urlopen)
headers = { #模拟浏览器头部信息 向豆瓣服务器发送消息
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" #from your browser
}
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
req = urllib.request.Request("http://douban.com",data = data,headers = headers, method = "POST")
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
BeautifulSoup :
Fonction: convertir un document HTML complexe en une arborescence complexe, chaque nœud est un objet Python, tous les objets peuvent être résumés en 4 types
(Outil puissant pour rechercher des balises html et du contenu, en évitant les travaux de recherche lourds)
--Tag tag
--NavigableString
--BelleSoup
--Commentaire
Exemple de base:
from bs4 import BeautifulSoup
file = open("baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")
print(bs.a)# get tag
print(bs.title.string) # get string inside tag
print(bs.a.attrs) # get attrs inside tag
Fonctions de recherche courantes:
bs.find_all("a") # 完全匹配
bs.find_all(re.compile("a")) # 正则匹配
bs.find_all(id = "head") # 寻找id为head的标签
# 方法搜索: 传入一个函数,根据函数的要求来搜索
def rules():
return tag.has_attr("name")
bs.find_all(rules)
tlist = bs.select('title') # 通过标签来查找
tlist = bs.select('.mnav') # 通过类名来查找(# id)
tlist = bs.select('head > title') # 查找子标签
tlist = bs.select('.manv ~ .bri') # 查找兄弟标签
# 获取该文本的方法
print(tlist[0].get_text())