技術共有

Python クローラーリクエストモジュール

2024-07-12

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

前戯:
1. 真夜中に眠れなくなるような写真を見たいけど、リソースがありません...
2. 休暇中の旅行のピークシーズンに電車のチケットをすぐに購入したいですか?
3. オンラインでショッピングをするとき、最高の評判と品質を備えた製品を迅速かつ正確に見つけたいと思いませんか?

クローラーとは:
- プログラムを作成して、ブラウザーがインターネットをサーフィンし、インターネットからデータをクロールするプロセスをシミュレートします。

クローラーの値:

-実用的なアプリケーション

-雇用

クローラーは合法ですか、それとも違法ですか?

法律で禁止されていません

法律違反のリスク

善良な爬虫類 悪意のある爬虫類

クローラーによってもたらされるリスクは、次の 2 つの側面に反映されます。
- クローラーは、訪問した Web サイトの通常の動作を妨害します。
- クローラーは、法律で保護されている特定の種類のデータまたは情報をキャプチャします。

クローラーの使用時にトラブルに巻き込まれる不運を回避するにはどうすればよいですか?

- アクセスした Web サイトの通常の動作を妨げないように、独自のプログラムを頻繁に最適化します。

- クロールされたデータを使用および配布する場合は、クロールされたコンテンツを確認し、ユーザーに関連する企業秘密などの機密コンテンツが見つかった場合は、適時にクロールまたは配布を停止する必要があります。

利用シーンにおけるクローラの分類
-ユニバーサルクローラー:
クロール システムの重要な部分。キャプチャされるのは、データのページ全体です。
- クローラーに焦点を当てる:
ユニバーサル クローラーをベースに構築されています。キャプチャされるのは、ページ内の特定の部分コンテンツです。

-増分クローラー:
Web サイト内のデータ更新を検出します。 Web サイトからの最新の更新データのみがクロールされます。


レプティリアンの槍と盾
上昇防止機構
ポータル Web サイトは、対応する戦略または技術的手段を策定することで、クローラーによる Web サイト データのクロールを防ぐことができます。
アンチアンチクライミング戦略
クローラー プログラムは、関連する戦略や技術的手段を策定することにより、ポータル Web サイトのクローリング防止メカニズムを突破し、ポータル情報を取得できます。


robots.txt プロトコル: +/robots.txt は Web サイトの後に表示されます
紳士協定。 Web サイト内のどのデータがクローラーによってクロールできるか、どのデータがクロールできないかを規定します。

httpプロトコル

- 概念: サーバーとクライアント間のデータ対話形式です。

共通リクエストヘッダー情報: リクエストキャリアの ID

- User-Agent:Connection: リクエスト完了後、接続を切断するか維持するか
共通の応答ヘッダー情報
-Content-Type: サーバーがクライアントに応答するデータ型


https プロトコル:- 安全なハイパーテキスト転送プロトコル (セキュリティ)
暗号化
対称キー暗号化
非対称キー暗号化
証明書キーの暗号化

文章

  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}')