Python バッチ クローラー ダウンロード PDF ファイル コードの実装

この記事の背景は、大学と良好な関係にある教師から、1000 個のハイパーリンク URL に対応する PDF ファイルを Excel でダウンロードできるかどうかを尋ねられたことです。手動でクリックして 1 つずつダウンロードすることもできますが、これでは労力と時間がかかりすぎます。私は以前の爬虫類の経験を思い出し、先生にとって実現可能性を分析し、それを実践しました。
  
予想外に、最初は困難に遭遇し、Excel のハイパーリンクを Python で読み込むと直接中国語で表示されました。したがって、最初のステップは、ハイパーリンクに対応する URL を分類し、Python を使用して対応する URL の PDF をクロールすることです。最初のステップについては、前の記事で詳しく説明しましたが、この記事では、バッチ クローラーによるファイルのダウンロードの 2 番目のステップと詳細なコードの紹介を共有します。


  

1. データの読み取り

  
まずデータを読み取ります。コードは次のとおりです。

import os 
import numpy as np 
import pandas as pd 

#设置文件存放的地址
os.chdir(r'F:\老师\下载文件')
#读取数据
link_date = pd.read_csv('import.csv',encoding='gbk')
link_date.head(2)

答えが得られました:
  
ここに画像の説明を挿入

  
  

2. ログイン URL をシミュレートし、ボタンをクリックして PDF をダウンロードします

  
次に、Chrome ブラウザを使用してログインをシミュレートし、コードで最初の URL を開き、ユーザーがクリックしてダウンロードすることをシミュレートします。具体的なコードは次のとおりです。

import json
import time
import random
from captcha import * 
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
#导入库

print('程序开始时间:', datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
#模拟使用Chrome浏览器登陆
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")  
driver =  webdriver.Chrome(options=options)
driver.implicitly_wait(10)
#打开搜索页
driver.get(link_date['网址'][0])
time.sleep(20)  # 暂停20s
#点击下载pdf的按钮
driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()

開いたURLは下図のとおりで、一番右の赤枠の三点を左クリックし、[その他のツール]を左クリックし、[開発者ツール]にマウスを移動して左クリックすると、表示バーが表示されます下の図の右側。次に、赤枠内の矢印を左クリックし、左端の赤枠の pdf にマウスを移動して左クリックすると、右側の赤枠の href に対応するモジュールが表示されます。モジュールを右クリックし、[コピー]を左クリックし、[Xpathをコピー]を左クリックして、driver.find_element_by_xpathのパスを取得します。
  
ここに画像の説明を挿入

  
  

3. すべてのファイルをバッチでダウンロードする書き込みサイクル

  
すべてのファイルをバッチでダウンロードするループを作成します。最も簡単な方法は、すべての URL を走査し、PDF をダウンロードするクリックをシミュレートすることです。コードは次のとおりです:

for i in range(0,1000):
    print(i)
    #打开搜索页
    driver.get(link_date['超链接'][i])
    time.sleep(20)  # 暂停20s
    driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()

ただし、このコードには問題があり、予期しない URL が存在するとコードが中断されやすく、次のエラーが報告されます。
  
ここに画像の説明を挿入

  
このとき、どのファイルがダウンロードされたかを手動で確認し、ダウンロードする範囲の値を調整する必要があります。コードを見つめたくない場合は、試行モードでコードを作成し、ダウンロードしたタグをラボに記録できます。アクシデントが発生した場合は、次の URL に直接ジャンプし、完全なダウンロードが完了したら、どの URL がダウンロードされていないかを整理します。具体的な文は次のとおりです。

lab = []
for i in range(1, 1000):
    try:
        print(i)
        #打开搜索页
        driver.get(link_date['网址'][i])
        time.sleep(20)  # 暂停20s
        driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()
        lab.append(i)
    except:
        pass

最終的なダウンロード結果は次のようになります。
  
ここに画像の説明を挿入

  
ここまでは、PDF ファイルをダウンロードする Python バッチ クローラーのコード実装について説明しましたが、興味のある学生は自分で図を実装できます。
  
グループへの期間限定無料アクセス】 Pythonの学習、Pythonで遊ぶ、リスク管理モデリング、人工知能、データ分析に関する募集情報、優れた記事、学習動画を提供するほか、学習や学習で遭遇した関連問題などの交流もできるグループです。仕事。必要な友人は WeChat ID 19967879837 を追加し、リスク管理モデリングなど、参加したいグループをメモする時間を追加できます。
  
あなたは興味があるかもしれません:
Python でピカチュウを描く
Python を使用してワードクラウドを描画するPython の
顔認識 - 私の目にはあなただけが映るPython は
美しい星空マップ (美しい背景) を描画します
Python の py2neo ライブラリを使用して neo4j を操作し、関連付けマップを構築するPython
ロマンス告白ソースコード集(愛、バラ、フォトウォール、星空の下での告白)

おすすめ

転載: blog.csdn.net/qq_32532663/article/details/132395715