Condivisione della tecnologia

Modulo richieste crawler Python

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Preliminari:
1. Vuoi vedere alcune foto che non ti faranno dormire nel cuore della notte, ma non hai le risorse...
2. Vuoi acquistare rapidamente i biglietti del treno durante l'alta stagione di viaggio durante le vacanze?
3. Quando fai acquisti online, vuoi individuare in modo rapido e preciso i prodotti con la migliore reputazione e qualità?

Cos'è un crawler:
- Scrivendo un programma, simula il processo di navigazione in Internet di un browser e quindi lascia che esegua la scansione dei dati da Internet.

Il valore del crawler:

-Applicazioni pratiche

-Occupazione

I crawler sono legali o illegali?

non è vietato dalla legge

Rischio di infrangere la legge

Rettili buoni, rettili maligni

I rischi portati dai crawler possono riflettersi nei due aspetti seguenti:
-I crawler interferiscono con il normale funzionamento dei siti Web visitati
-I crawler acquisiscono tipi specifici di dati o informazioni protetti dalla legge

Come evitare la sfortuna di finire nei guai quando si utilizza un crawler?

- Ottimizza frequentemente i tuoi programmi per evitare di interferire con il normale funzionamento dei siti Web visitati

- Quando si utilizzano e si diffondono i dati sottoposti a scansione, esaminare il contenuto sottoposto a scansione. Se vengono rilevati contenuti sensibili come segreti aziendali relativi all'utente, la scansione o la diffusione devono essere interrotte in modo tempestivo.

Classificazione dei crawler negli scenari di utilizzo
-Cingolo universale:
Una parte importante del sistema di scansione. Ciò che viene catturato è un'intera pagina di dati.
-Concentrarsi sui crawler:
È costruito sulla base del crawler universale. Ciò che viene catturato è il contenuto parziale specifico della pagina.

-Cinger incrementale:
Rileva gli aggiornamenti dei dati nel sito web. Verranno sottoposti a scansione solo gli ultimi dati aggiornati dal sito Web.


Lancia e scudo rettiliani
Meccanismo anti-arrampicamento
I siti web dei portali possono impedire ai crawler di eseguire la scansione dei dati dei siti web formulando strategie o mezzi tecnici corrispondenti.
Strategia anti-anti-arrampicata
Il programma crawler può violare il meccanismo anti-crawling nel sito web del portale formulando strategie o mezzi tecnici pertinenti per ottenere le informazioni del portale.


Protocollo robots.txt: +/robots.txt può essere visualizzato dopo qualsiasi sito web
Accordo tra gentiluomini. Stabilisce quali dati del sito web possono essere sottoposti a scansione dai crawler e quali dati non possono essere sottoposti a scansione.

protocollo http

- Concetto: è una forma di interazione dei dati tra il server e il client.

Informazioni comuni sull'intestazione della richiesta: identità del vettore della richiesta

- User-Agent:Connessione: una volta completata la richiesta, se disconnettersi o mantenere la connessione
Informazioni sull'intestazione della risposta comune
-Content-Type: il tipo di dati a cui il server risponde al client


Protocollo https:- Protocollo di trasferimento ipertestuale sicuro (sicurezza)
Crittografia
Crittografia a chiave simmetrica
Crittografia a chiave asimmetrica
Crittografia della chiave del certificato

testo

  1. import requests
  2. # 检查当前脚本是否作为主程序运行
  3. if __name__ == "__main__":
  4. # 定义 KFC 官方网站获取门店列表信息的 URL
  5. url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
  6. # 定义 HTTP 请求的头部信息,模拟浏览器请求
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
  9. }
  10. # 提示用户输入一个位置信息,作为搜索门店的关键词
  11. keyword = input('enter location:') # 例如 "北京"
  12. # 循环请求第1页到第9页的数据
  13. for page in range(1,10):
  14. # 定义发送请求时所需的参数
  15. params = {
  16. 'op': 'keyword', # 操作类型为关键词搜索
  17. 'cname': '', # 城市名称(此处为空)
  18. 'pid': '', # 其他参数(此处为空)
  19. 'keyword': keyword, # 用户输入的关键词
  20. 'pageIndex': page, # 当前请求的页面索引
  21. 'pageSize': 1000, # 每页显示的门店数量
  22. }
  23. # 尝试发送请求并处理响应
  24. try:
  25. # 发送 GET 请求,请求参数包括 URL、参数和头部信息
  26. response = requests.get(url=url, params=params, headers=headers)
  27. # 检查响应状态码,如果不是 200,将引发 HTTPError 异常
  28. response.raise_for_status()
  29. # 获取响应内容
  30. page_text = response.text
  31. # 构建文件名,包括关键词、页码和 .html 扩展名
  32. filename = f'{keyword}_page_{page}.html'
  33. # 打开一个文件,以写入模式打开,并指定编码为 utf-8
  34. with open(filename, 'w', encoding='utf-8') as fp:
  35. # 将响应内容写入到文件中
  36. fp.write(page_text)
  37. # 打印一条消息,表明文件已经成功保存
  38. print(f'{filename} 保存成功!!!')
  39. # 捕获由 requests 库抛出的任何异常
  40. except requests.RequestException as e:
  41. # 打印异常信息
  42. print(f'请求错误: {e}')