【Pythonで遊ぶシリーズ】 【Xiaobiさん必見】Pythonクローラー技術を使ってプロキシIPを取得してファイルに保存する

ここに画像の説明を挿入

序文

この記事では、Python クローラー テクノロジーを使用してプロキシ IP を取得し、それをファイルに保存する方法を紹介します。サードパーティのライブラリ リクエストを使用して HTTP リクエストを送信し、lxml ライブラリを使用して HTML を解析することにより、複数の Web ページから IP、ポート、およびアドレス情報を取得できます。この記事では、読者がクローラーの動作をよりよく理解できるように、コードの各部分を段階的に分析します。

依存ライブラリをインポートする

ここに画像の説明を挿入

import requests
from lxml import etree

requestsHTTP リクエストを送信するためのライブラリとHTML を解析するためのライブラリをインポートしますlxml

データを書き込む準備ができているファイルを開きます

ここに画像の説明を挿入

with open('IP代理.txt','w',encoding='utf-8') as f:

open関数を使用してファイル オブジェクトを作成しf、ファイル名を指定し'IP代理.txt'、書き込みモードでファイルを開きます。エンコーディングは に設定されています'utf-8'

複数のページをクロールするループ

ここに画像の説明を挿入

for i in range(1,10):
    url = f'http://www.66ip.cn/{
      
      i}.html'
    print(f'正在获取{
      
      url}')
    headers = {
    
    
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
    }
    resp = requests.get(url,headers = headers)
    resp.encoding ='gbk'
    e = etree.HTML(resp.text)
    ips = e.xpath('//div[1]/table//tr/td[1]/text()')
    ports = e.xpath('//div[1]/table//tr/td[2]/text()')
    addrs = e.xpath('//div[1]/table//tr/td[3]/text()')

    for i,p,a in zip(ips,ports,addrs):
        f.write(f'IP地址:{
      
      i}----port端口号:{
      
      p}-----地址:{
      
      a}\n')

コードのこの部分では、ループを使用して複数のページのプロキシ情報をクロールします。ループ変数のi範囲は 1 ~ 9 です。ページごとに、最初に完全な URL が構築されます。http://www.66ip.cn/{i}.htmlここで、{i}はページのページ番号です。次に、print関数を使用して、取得されているページの URL を出力します。

次に、独自のブラウザを偽装するために、headersブラウザのユーザー エージェント情報を含む辞書が定義されます。

ディクショナリ内のユーザー エージェント情報をrequests使用して、ライブラリを通じてGET リクエストを送信します。headers取得した応答内容はresp変数に保存されます。

対象の Web サイトでは GBK エンコードが使用されているため、応答のエンコードを に設定します'gbk'

応答コンテンツを操作可能な HTML オブジェクトに解析し、ライブラリの関数eを使用して変数に代入しますlxmletree.HTML

XPath 式を使用して HTML オブジェクトから IP、ポート、およびアドレスのリストを抽出します。IP リストは に保存されips、ポート リストは に保存されports、アドレス リストはaddrsに保存されます。

関数を使用してzip3 つのリストを 1 つずつパックし、forループを使用してパックされたデータを走査します。ループ内では、 file オブジェクトfのメソッドを使用してwrite各プロキシ情報をファイルに書き込みます。書き込み形式は です'IP地址:{i}----port端口号:{p}-----地址:{a}\n'

コード全体の機能は、複数の Web ページの IP、ポート、およびアドレス情報をクロールし、結果を'IP代理.txt'という名前のファイルに保存することです。

完全なコード

import requests
from lxml import etree

# 定义保存结果的文件
with open('IP代理.txt', 'w', encoding='utf-8') as f:
    # 循环爬取多个页面
    for i in range(1, 10):
        # 构造完整的URL
        url = f'http://www.66ip.cn/{
      
      i}.html'
        print(f'正在获取{
      
      url}')

        # 伪装浏览器请求头
        headers = {
    
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
        }

        # 发送GET请求
        resp = requests.get(url, headers=headers)

        # 设置响应的编码为GBK
        resp.encoding = 'gbk'

        # 解析HTML
        e = etree.HTML(resp.text)

        # 提取IP、Port和地址信息
        ips = e.xpath('//div[1]/table//tr/td[1]/text()')
        ports = e.xpath('//div[1]/table//tr/td[2]/text()')
        addrs = e.xpath('//div[1]/table//tr/td[3]/text()')

        # 将提取的代理信息写入文件
        for ip, port, addr in zip(ips, ports, addrs):
            f.write(f'IP地址:{
      
      ip}----port端口号:{
      
      port}-----地址:{
      
      addr}\n')

実行結果

ここに画像の説明を挿入

結論

この記事で紹介した Python クローラー テクノロジーを使用すると、プロキシ IP を簡単に取得してファイルに保存できます。これは、データ収集、クローラ対策処理、またはプロキシ IP を使用する必要があるその他の Web クローラ アプリケーションに非常に役立ちます。この記事が、クローラーの動作原理をより深く理解し、実際のプロジェクトで役割を果たすのに役立つことを願っています。

おすすめ

転載: blog.csdn.net/qq_33681891/article/details/132003374