この記事の背景は、大学と良好な関係にある教師から、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
ロマンス告白ソースコード集(愛、バラ、フォトウォール、星空の下での告白)