Pythonがウェブサイトのドキュメントデータをクロールする完全なチュートリアル(ソースコード付き)

序文

この記事のテキストと写真はインターネットからのものであり、学習とコミュニケーションのみを目的としており、商用目的ではありません。ご不明な点がございましたら、処理についてお問い合わせください。

基本的な開発環境

Python 3.6

Pycharm

関連モジュールの使用

import os
import requests
import time
import re
import json
from docx import Document
from docx.shared import Cm

 

Pythonをインストールして環境変数に追加すると、pipは必要な関連モジュールをインストールします。

Pythonクローラー、データ分析、Webサイト開発、その他のケースチュートリアルビデオはオンラインで無料で視聴できます

https://space.bilibili.com/523606542

 Python学習交換グループ:1039645993

ランディングページの分析

 

ウェブサイトのドキュメントコンテンツは写真の形式です。独自のデータインターフェースを備えています

インターフェイスリンク:

https://openapi.book118.com/getPreview.html?&project_id=1&aid=272112230&t=f2c66902d6b63726d8e08b557fef90fb&view_token=SqX7ktrZ_ZakjDI@vcohcCwbn_PLb3C1&page=1&callback=jQuery18304186406662159248_1614492889385&_=1614492889486

インターフェース要求パラメーター

 

全体のアイデア

  • 応答データ(文字列)を返すようにWebページに要求する
  • 中央のデータ(リスト)インデックスは、reモジュールマッチングによって抽出された0(文字列)です。
  • jsonモジュールを介して、抽出されたデータはjsonモジュールに変換されます
  • トラバースして各画像のURLアドレスを取得します
  • 画像をローカルフォルダに保存します
  • 画像をWord文書に保存します
  • クローラーコードの実装

クローラーコードの実装

def download():
    content = 0
    for page in range(1, 96, 6):
        # 给定 2秒延时
        time.sleep(2)
        # 获取时间戳
        now_time = int(time.time() * 1000)
        url = 'https://openapi.book118.com/getPreview.html'
        # 请求参数
        params = {
            'project_id': '1',
            'aid': '272112230',
            't': 'f2c66902d6b63726d8e08b557fef90fb',
            'view_token': 'SqX7ktrZ_ZakjDI@vcohcCwbn_PLb3C1',
            'page': f'{page}',
            '_': now_time,
        }
        # 请求头
        headers = {
            'Host': 'openapi.book118.com',
            'Referer': 'https://max.book118.com/html/2020/0427/8026036013002110.shtm',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
        }
        response = requests.get(url=url, params=params, headers=headers)
        # 使用正则表达式提取内容
        result = re.findall('jsonpReturn\((.*?)\)', response.text)[0]
        # 字符串转json数据
        json_data = json.loads(result)['data']
        # 字典值的遍历
        for value in json_data.values():
            content += 1
            # 拼接图片url
            img_url = 'http:' + value
            print(img_url)
            headers_1 = {
                'Host': 'view-cache.book118.com',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
            }
            # 请求图片url地址 获取content二进制数据
            img_content = requests.get(url=img_url, headers=headers_1).content
            # 文件名
            img_name = str(content) + '.jpg'
            # 保存路径
            filename = 'img\\'
            # 以二进制方式保存 (图片、音频、视频等文件都是以二进制的方式保存)
            with open(filename + img_name, mode='wb') as f:
                f.write(img_content)

注意点:

1.遅延を与える必要があります。そうしないと、インターフェースデータは要求されません。

2.画像​​のURLを要求するときは、headersパラメータを完全に書き込む必要があります。そうしないと、保存された画像を開くことができません。

3.名前は、後で単語に保存するのに便利なように、指定された番号1.jpg、2.jpgにすることが望ましいです。

クローラー部分のコードは比較的単純で、特別な問題はありません。

これらのドキュメントをクロールするには、印刷またはクエリを実行する必要があるため、これらの個々の画像をWordドキュメントに保存する必要があります。

ドキュメントを書く

def save_picture():
    document = Document()
    path = './img/'
    lis = os.listdir(path)
    c = []
    for li in lis:
        index = li.replace('.jpg', '')
        c.append(index)
    c_1 = sorted(list(map(int, c)))
    print(c_1)
    new_files = [(str(i) + '.jpg') for i in c_1]
    for num in new_files:
        img_path = path + num
        document.add_picture(img_path, width=Cm(17), height=Cm(24))
        document.save('tu.doc')  # 保存文档
        os.remove(img_path)  # 删除保存在本地的图片

おすすめ

転載: blog.csdn.net/m0_48405781/article/details/114398129