1. ホーム
  2. スクリプト・コラム
  3. パイソン

Python百行で韓服サークルの画像クロールを実現する

2022-01-02 19:56:34

旅行をしていると、観光地でいろいろな衣装を着て写真を撮っている観光客をよく見かけますが、あまり意図的に気にすることはないですよね。2日前、ウェブを見ていて、あるサイトを見たとき、中国の衣装を着た女の子たちが実に格好いいことに気がついた。仕事でも、コピーでも、こういうきれいな写真を素材にするのは、ニーズがあるから、登る、登る、登る!(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)」と、言っていました。

さっそくですが、以下、画像クローリングについて詳しく説明します。

ウェブサイトを分析する

URLは以下の通りです。

https://www.aihanfu.com/zixun/tushang-1/

これは、上記のウェブサイトの通し番号1である2ページ目のURLが2となり、全ページにアクセスできるようになるという観測から、1ページ目のURLとしたものです。

図によると、各サブサイトのリンク、つまりhrefのURLを取得して、各URLにアクセスして、画像のURLを探して、ダウンロードすればいいんですね。

サブリンクの取得

上の図のデータを取得するためには、soupやreなどのメソッドを使うか、xpathを使うことができる。この記事では、エディタはxpathを使ってlocateを行い、locate関数を書き、各サブサイトのリンクを取得し、main関数に戻るというものですが、ここではfor loopで、ある仕掛けが使われています、チェックしてみてください。

	public String toString() {
		// The schemaMappings are initialized in getSchemaMappings()
		return "EntityResolver using mappings " + getSchemaMappings();
	}


タイトルと画像アドレスの取得

できるだけ多くのデータを収集するために、我々は、タグと画像のアドレスを取る、もちろん、他のプロジェクトは、出版社と時間を収集する必要がある場合、それはまた、より多くを行うことが可能ですが、この記事は拡大されません。

上記のようにURLリンクをクリックすると、headノード内にタイトルがあり、タイトルの取得はフォルダー作成時に使用するためであることがわかります。

コードは以下の通りです。

def get_page(url, headers):
    """
    Get the image address based on the subpage link, then package it for download
    params: url subURL
    """
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        r.encoding = r.apparent_encoding
        html = etree.HTML(r.text)
        html = etree.tostring(html)
        html = etree.fromstring(html)
        # Get the title
        title = html.xpath(r'//*[@id="main_article"]/header/h1/text()')
        # Get the image address
        img = html.xpath(r'//div[@class="arc_body"]//figure/img/@src')
        # title preprocessing 
        title = ''.join(title)
        title = re.sub(r'[|]', '', title)
        print(title)
        save_img(title, img, headers)


画像の保存

各ページをめくりながら、サブリンクに対応する画像を保存する必要がありますが、ここではリクエストの状態とパスに注意する必要があります。

def save_img(title, img, headers):
    """
    Create subfolders based on titles
    Download all img links and choose to change the quality size
    params: title : title
    params: img : image address
    """
    if not os.path.exists(title):
        os.mkdir(title)
    # Download
    for i, j in enumerate(img): # iterate through the list of URLs
        r = requests.get(j, headers=headers)
        if r.status_code == 200:
            with open(title + '//' + str(i) + '.png', 'wb') as fw:
                fw.write(r.content)
        print(title, 'The first of ', str(i), 'The download is complete!')


主な機能

if __name__ == '__main__':
    """ 
    Find one page at a time
    params : None
    """
    path = '/Users/********/Hanbok/'
    if not os.path.exists(path):
        os.mkdir(path)
        os.chdir(path)
    else:
        os.chdir(path)
    # url = 'http://www.aihanfu.com/zixun/tushang-1/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
                             ' AppleWebKit/537.36 (KHTML, like Gecko)'
                             ' Chrome/81.0.4044.129 Safari/537.36'}
    for _ in range(1, 50):
        url = 'http://www.aihanfu.com/zixun/tushang-{}/'.format(_)
        for _ in get_menu(url, headers):
            get_page(_, headers) # Get a page


これまで我々はすべてのリンクを完了し、クローラの記事は、私は一度以上の紹介、一方では、私はあなたがクローラのスキルをより身近にすることができます願って、他方では、私はクローラがデータ分析、データマイニングの基礎であると思います。データを取得するためのクローラーがない、どのようにデータ分析する。

上記は、韓服サークル画像クロールを達成するためのコードのpython百行の詳細であり、韓服サークル画像をクロールpythonの詳細については、スクリプトハウスの他の関連記事に注意を払うしてください!.