数十行のコードバッチダウンロードHD壁紙

写真をこする

概要概要

映画のデスクトップの背景は時間が経つと疲れます。背景を変更する場合は、通常、オンラインでダウンロードして取得する必要があります。ページをめくるのは非常に面倒です。一度にたくさんの写真を表示できますか?州の各ページを見てください。より簡単な方法は、写真をローカルに保存してから、すべての写真を一度に表示することです。この部分は、インターネット上の写真をローカルにクロールするための複雑な構造のないクローラーを作成することです。(実際、何を書けばいいのかわからないので、書いたものを入れて、全体のプロセスを言葉で説明します。)公式アカウントの「壁紙」に返信することで、コードや壁紙を入手できます。作成は簡単ではありません。「見て」をクリックしてください。 "聖歌。

タスク分析

要件は、インターネットから見栄えの良いコンピューターの壁紙を入手し、クローラー実装戦略を採用することです。

1.クロールする必要のある写真のWebサイトを見つけます。ここでは、Biantu.comを例として取り上げます。

2.適切なクロール方法を選択します。このタスクは単純すぎるため、クローラーを作成するだけです。

クローラーの設計

それがデザインであると言うことは、実際にはクローラーの基本的な構成について話すことです。クローラーは通常、いくつかのステップに分割されます(ここでは、ステップは最小限に分割されています)。

1.ターゲットURLを取得していることを確認します(コアは検索です)。この部分は一般的に観察されます。ホームページのリダイレクトに注意してください。

2. Pythonコードを使用して、データを取得するためのリクエストを送信します(java go)

3.取得した正確なデータを分析し、新しいターゲット(新しいURL)を見つけて、最初のステップ(自動化)に戻ります。

4.データの永続性(ローカルに保存)

クローラーの実装

実装では、データ分析とデータストレージを直接組み合わせます。2つの方法に分割することもできます。

クローラーに不慣れな人にとって、難しいのは、たくさんのコードから必要なものを見つける方法にあります。

データ分析は、一般に、正規表現、xpath、bs4の3つのカテゴリに分類されます。後者の2つをお勧めします。もちろん、大物の場合は、最初のカテゴリも使用できます。私は個人的にxpathを使用することを好むため、以下もxpathを使用して実装されます。このプロジェクトは、初心者が始めるのに非常に適した入門プロジェクトとして当時私が作成したものです


import urllib
import os
import requests
from bs4 import BeautifulSoup
from lxml import etree
import json

class PicSpider(object):
    def __init__(self):
        self.base_url = "http://pic.netbian.com/4kdongwu/index_{}.html"
        self.headers = {
            # 浏览器版本
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) "
                          "Chrome/14.0.835.163 Safari/535.1",
        }

    # 1.构建所有url
    def get_url_list(self):
        url_list = []
        for i in range(2, 4):
            url = self.base_url.format(i)
            url_list.append(url)
        return url_list

    # 2.发送请求
    def send_request(self, url):
        print(url)
        data = requests.get(url, headers=self.headers).content.decode('gbk')
        return data

    # 3.解析存储数据
    def parse_data(self, data):
        tree = etree.HTML(data)
        li_list = tree.xpath("//div[@class='slist']//li")
        for li in li_list:
            pic_name = li.xpath('./a/b/text()')[0]
            pic_url = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0]
            print(pic_url)
            pic_path = './imgs/' + pic_name + '.jpg'
            urllib.request.urlretrieve(url=pic_url, filename=pic_path)

    def start(self):
        if not os.path.exists('./imgs'):
            os.mkdir('./imgs')
        url_list = self.get_url_list()
        # 循环遍历请求
        for url in url_list:
            data = self.send_request(url)
            self.parse_data(data)

PicSpider().start()

初期化時に、リクエストヘッダーと呼ばれるUser-Agentと呼ばれるパラメータがあります。一部のWebサイト(ほとんどない)はリクエストヘッダーを必要としないため、このパラメータは必須パラメータと呼ぶことができ、アクセスポイントはブラウザ内にあります。通信網。

数十行のコードバッチダウンロードHD壁紙

このWebサイトのUrlはindex_ {}で変更されるため、base_urlは次のように定義されます。


self.base_url = "http://pic.netbian.com/4kdongwu/index_{}.html"

ステップ1では、forループを使用して、アクセスするURLのリスト、範囲(開始ページ、終了ページ)を作成します。

リクエストするときは、サードパーティのモジュールリクエストを使用してください。実際、Pythonに付属のurllibリクエストを使用する必要があります。結局のところ、これはネイティブです。

データの解析では、xpath分析を使用します。

数十行のコードバッチダウンロードHD壁紙

srcの下で取得されるものはurlの一部であるため、URLの2次スプライシングが多くなります。これは38行目のコードです。


pic_url = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0]

次のステップは、それを保存するためのフォルダーを作成することです。

結果表示

実行中の取得の進行状況を表示するために、URLを印刷することができます。

数十行のコードバッチダウンロードHD壁紙

結果は、同じレベルのディレクトリのimgsフォルダに保存されます。
数十行のコードバッチダウンロードHD壁紙

おすすめ

転載: blog.51cto.com/15069472/2577334