Python ユニバーサル コード テンプレート: クローラー コード

こんにちは、越川です。

多くの学生は、Python やプログラミング言語を聞くと、条件反射で「難しい」と感じるかもしれません。しかし、今日の Python コースは例外です。なぜなら、今日教えられる **Python のスキルでは、コンピューターの原理を理解する必要はなく、複雑なプログラミング モデルを理解する必要もないからです。**開発者でなくても、リンクやファイルを差し替えるだけで簡単にできます。

これらのいくつかの実用的なヒントは、Python の日常的なヘルパーのベスト プラクティスにすぎません。例えば:

  • ドキュメントのクロール、フォームのクロール、学習教材のクロール。
  • チャートで遊んで、データの視覚化を生成します。
  • オフィスオートメーションを実現するためにバッチでファイルに名前を付けます。
  • 写真をバッチで作成し、透かしを追加し、サイズを調整します。

次に、Python を使用して 1 つずつ実装します. 私が提供したコードはユニバーサル コードであり、クロールする Web ページのリンク、ファイルの場所、および写真に置き換えることで処理できます。

Python および関連する環境セットアップをインストールしていない場合は、以前の記事を参照してください。

**ヒント:** 異なる章のデータは相互参照される可能性があるため、最初にデスクトップに作業フォルダーを作成し、次に実験用に章ごとに個別の Python ファイルを作成することをお勧めします。たとえば、新しい pytips ディレクトリを作成し、このディレクトリ内に各章のヒント フォルダーを作成し、その中に対応する.pyファイル。(あなたの詳細によると、私のフォルダもこれとは異なります)

1. Pythonクローラーを巧みに使い、富の自由を実現する

まず、Python を使用してクロールすることができます。簡単に言うと、ネットワーク上のデータ(文書、資料、写真など)をつかむことです。たとえば、大学院入試の資料や学習資料をクロールしたり、インターネット上の表データを分析したり、画像をまとめてダウンロードしたりできます。

1つずつ達成する方法を見てみましょう。

1.1 ドキュメントと学習教材のクロール

まず、クロールする Web サイトを決定する必要があります。何のために手に入れようとしているのですか?たとえば、Xiaoyue は、Qingyan Gang の Web サイトのアプリケーション ガイドを登りたいと考えているため、現在の Web ページにあるすべての記事のタイトルとハイパーリンクを収集して、後で閲覧できるようにしたいと考えています。
画像.png
画像.png

ウェブサイトのリンクをクロールする: https://zkaoy.com/sions/exam
目的: 現在のページのすべての記事のタイトルとハイパーリンクを収集する

Python を使用するには、次の 2 ステップ コード テンプレートの実装を参照できます (注意: 最初に Python 依存関係をインストールする必要があります: urllib3 bs4)。
必要なライブラリをインストールします。

pip install urllib3 BeautifulSoup4

最初のステップは、Web ページをダウンロードしてファイルとして保存することです。コードは次のとおりです。
**PS:**ここでは、わかりやすくするために、2 つのコード ファイルに分割し、後で 1 つのコード ファイルにマージします。

# urllib3 的方法
# file_name:Crawler_urllib3.py
import urllib3


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    http = urllib3.PoolManager()
    response = http.request("GET", url)
    response_data = response.data
    html_content = response_data.decode()
    return html_content


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    fo = open(filename, "w", encoding="utf-8")
    fo.write(content)
    fo.close()


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    result = download_content(url)
    save_to_file("tips1.html", result)


if __name__ == '__main__':
    main()


# requests 代码
# file_name:Crawler_requests.py
import requests


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    response = requests.get(url).text
    return response


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    with open(filename, mode="w", encoding="utf-8") as f:
        f.write(content)


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    result = download_content(url)
    save_to_file("tips1.html", result)


if __name__ == '__main__':
    main()

2 番目のステップは、Web ページを解析し、記事のリンクとタイトルを抽出することです。

# file_name:html_parse.py
# 解析方法一
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8') as f:
		html_content = f.read()
		doc = BeautifulSoup(html_content)
	return doc

def parse(doc):
	post_list = doc.find_all("div", class_="post-info")
	for post in post_list:
		link = post.find_all("a")[1]
		print(link.text.strip())
		print(link["href"])

def main():
	filename = "tips1.html"
	doc = create_doc_from_filename(filename)
	parse(doc)

if __name__ == '__main__':
	main()


# file_name:html_parse_lxml.py
# 解析方法二,指定解析器
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8') as f:
		html_content = f.read()
		soup = BeautifulSoup(html_content, "lxml")
	return soup

def parse(soup):
	post_list = soup.find_all("div", class_="post-info")
	for post in post_list:
		link = post.find_all("a")[1]
		print(link.text.strip())
		print(link["href"])

def main():
	filename = "tips1.html"
	soup = create_doc_from_filename(filename)
	parse(soup)

if __name__ == '__main__':
	main()

**PS:** 2 つのコードは非常に似ていますが、違いはパーサーが指定されていることです - lxml

コードを実行すると、Web ページのタイトルとリンクが画面に出力されていることがわかります。

敲黑板!这些省份往届生不能预报名!
https://zkaoy.com/15123.html
二战必须回户籍所在地考吗?
https://zkaoy.com/15103.html
这些同学不能参加预报名!不注意,有可能考研报名失败!
https://zkaoy.com/15093.html
呜呼~考研报名费,这种情况可以退款!
https://zkaoy.com/15035.html
注意:又发通知!22研招有4点变化??
https://zkaoy.com/14977.html
2021考研初试时间定了!正式网报时间有变化
https://zkaoy.com/14915.html
快码住!考研前的这些关键时间点,千万不能错过!
https://zkaoy.com/14841.html
近万名考生考研报名失败!问题出在这!22考研一定注意!
https://zkaoy.com/14822.html
往届生比应届生更容易上岸,你认同吗?
https://zkaoy.com/14670.html
各省市考研报名费用!
https://zkaoy.com/14643.html
要开始报名了?现在不需要担心,没你想的那么复杂……
https://zkaoy.com/14620.html
教育部公布重要数据:研究生扩招20.74%!
https://zkaoy.com/14593.html
虚假招生?这一高校临近开学取消奖学金!
https://zkaoy.com/14494.html
下个月要预报名了,高频问题早知道
https://zkaoy.com/14399.html
注意!这些网报信息要准备好,否则影响9月考研报名!
https://zkaoy.com/14352.html
想考上研,各科应该考多少分?
https://zkaoy.com/14273.html
选择报考点需要注意什么?报考点有限制!
https://zkaoy.com/14161.html
各地考研报名费汇总!快来看看你要交多少钱!
https://zkaoy.com/14158.html
考研高校推免人数公布,统考名额还剩多少?
https://zkaoy.com/14092.html
这几所高校考研参考书有变!参考书目要怎么搜集?
https://zkaoy.com/14061.html
院校指南
https://zkaoy.com/sions/zxgg1
这些要提前准备好!不然影响报名!
https://zkaoy.com/13958.html
救命!近万人因为这个,错失考研机会!
https://zkaoy.com/13925.html
考研如何看招生简章和招生目录?
https://zkaoy.com/13924.html

上で逆アセンブルした結果、1 つのコード ファイルにマージできるようになりました。

# file_name:Crawler.py
import requests
from bs4 import BeautifulSoup


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    response = requests.get(url).text
    return response


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    with open(filename, mode="w", encoding="utf-8") as f:
        f.write(content)

def create_doc_from_filename(filename):
    # 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
    with open(filename, "r", encoding='utf-8') as f:
        html_content = f.read()
        soup = BeautifulSoup(html_content, "lxml")
    return soup

def parse(soup):
    post_list = soup.find_all("div", class_="post-info")
    for post in post_list:
        link = post.find_all("a")[1]
        print(link.text.strip())
        print(link["href"])


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    filename = "tips1.html"
    result = download_content(url)
    save_to_file(filename, result)
    soup = create_doc_from_filename(filename)
    parse(soup)

if __name__ == '__main__':
    main()

コードファイル: [https://github.com/AndersonH​​JB/AIYC_DATA/tree/main/01 - Pythonユニバーサルコードテンプレート: 必修の実践スキル10選/1.1 Pythonクローラーを上手に使って富の自由を実現](https://github .com/AndersonH​​JB/AIYC_DATA/tree/main/01 - Pythonユニバーサルコードテンプレート: 必修の実践スキル10選/1.1 Pythonクローラーを上手に使って富の自由を実現する)

では、他の Web ページをクロールしたい場合、どのように置き換えるのでしょうか? 下の写真に示すように、いくつかの場所を置き換えるだけで済みます。
画像.png
画像.png

  1. ダウンロードしたいWebページのURLに置き換えます
  2. Webページの保存されたファイル名に置き換えます
  3. これは BeautifulSoup 関数です。必要なコンテンツを html 構造から段階的に解析するために使用します。ここで達成することは、最初に class 属性が でpost-infoある解析する Web ページの構造がこれと異なる場合は、コースhttps://www.aiyc.top/673.html#6. Requests_ および _BeautifulSoup_ ライブラリの具体的な使用方法を参照してください。美しいスープ。

1.2 フォームを取得してデータ分析を行う

毎日ネットサーフィンをしていると、便利な表を目にすることが多く、将来の使用のためにそれらを保存したいと考えていますが、それらをExcelに直接コピーすると、変形したり、文字化けしたり、間違った形式になったりすることがよくあります。 Python の助けを借りて簡単に実現できます Web ページにテーブルを保存します。(ヒント: 最初に依存関係をインストールする必要があります: urllib3、pandas)

pip install urllib3 pandas

招商銀行の外国為替ページを例に取ります。
画像.png
Python コードは次のとおりです。

# file_name: excel_crawler_urllib3.py
import urllib3
import pandas as pd

def download_content(url):
	# 创建一个 PoolManager 对象,命名为 http
	http = urllib3.PoolManager()
	# 调用 http 对象的 request 方法,第一个参数传一个字符串 "GET"
	# 第二个参数则是要下载的网址,也就是我们的 url 变量
	# request 方法会返回一个 HTTPResponse 类的对象,我们命名为 response
	response = http.request("GET", url)

	# 获取 response 对象的 data 属性,存储在变量 response_data 中
	response_data = response.data

	# 调用 response_data 对象的 decode 方法,获得网页的内容,存储在 html_content
	# 变量中
	html_content = response_data.decode()
	return html_content

def save_excel():
	html_content = download_content("http://fx.cmbchina.com/Hq/")
	# 调用 read_html 函数,传入网页的内容,并将结果存储在 cmb_table_list 中
	# read_html 函数返回的是一个 DataFrame 的list
	cmb_table_list = pd.read_html(html_content)
	# 通过打印每个 list 元素,确认我们所需要的是第二个,也就是下标 1
	cmb_table_list[1].to_excel("tips2.xlsx")

def main():
	save_excel()

if __name__ == '__main__':
	main()


# file_name: excel_crawler_requests.py
import requests
import pandas as pd
from requests.exceptions import RequestException


def download_content(url):
	try:
		response = requests.get(url)
		if response.status_code == 200:
			return response.text
		else:
			return "None"
	except RequestException as e:
		return e


def save_excel(filename):
	html_content = download_content("http://fx.cmbchina.com/Hq/")
	# 调用 read_html 函数,传入网页的内容,并将结果存储在 cmb_table_list 中
	# read_html 函数返回的是一个 DataFrame 的list
	cmb_table_list = pd.read_html(html_content)
	# 通过打印每个 list 元素,确认我们所需要的是第二个,也就是下标 1
	# print(cmb_table_list)
	cmb_table_list[1].to_excel(filename)


def main():
	filename = "tips2.xlsx"
	save_excel(filename)

if __name__ == '__main__':
	main()

下図は理解のためのもので、
画像.png
画像.png
実行後、コードファイルのあるディレクトリにExcelファイルがtips2.xlsx生成され、下図のように開かれます。
画像.png
自分だけのフォルムを手に入れたい時は、以下の3つのパーツを差し替えるだけ。
画像.png

  1. 保存する Excel ファイルの名前を変更します。
  2. テーブルをクロールするページの URL に置き換えます。
  3. Web ページで取得するテーブルなど、テーブルのシリアル番号に置き換えます。

コード リンク: https://github.com/AndersonH​​JB/AIYC_DATA/tree/main/01-Python%20ユニバーサル コード テンプレート: 10%20 は実践的なスキルを習得する必要があります/1.2%20 テーブルをつかんでデータ分析を行います

1.3 画像の一括ダウンロード

Web ページにお気に入りの写真がたくさんある場合、それらを 1 つずつ保存するのは比較的非効率的です。

また、Python を使用して画像を高速でダウンロードすることもできます。Heilang.com を例にとると、この Web ページを見ました。
画像.png
見栄えが良いので、すべての画像をダウンロードしたいと考えています. スキームは 1 とほぼ同じです.

最初に Web ページをダウンロードし、その中の img タグを分析してから、画像をダウンロードします。まず、ダウンロードした画像を保存するために、作業ディレクトリにフォルダー tips_3 を作成します。

まず、Web ページをダウンロードします。Python コードは次のとおりです。

# -*- coding: utf-8 -*-
# @Author: 
# @Date:   2021-09-13 20:16:07
# @Last Modified by:   aiyc
# @Last Modified time: 2021-09-13 21:02:58
import urllib3

# 第一个函数,用来下载网页,返回网页内容
# 参数 url 代表所要下载的网页网址。
# 整体代码和之前类似
def download_content(url):
	http = urllib3.PoolManager()
	response = http.request("GET", url)
	response_data = response.data
	html_content = response_data.decode()
	return html_content
# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量

def save_to_file(filename, content):
	fo = open(filename, "w", encoding="utf-8")
	fo.write(content)
	fo.close()

url = "https://www.duitang.com/search/?kw=&type=feed"
result = download_content(url)
save_to_file("tips3.html", result)

次に、img タグを抽出し、画像をダウンロードします。

from bs4 import BeautifulSoup
from urllib.request import urlretrieve

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	fo = open(filename, "r", encoding='utf-8')
	html_content = fo.read()
	fo.close()
	doc = BeautifulSoup(html_content, "lxml")
	return doc

doc = create_doc_from_filename("tips3.html")
images = doc.find_all("img")
for i in images:
	src = i["src"]
	filename = src.split("/")[-1]
	# print(i["src"])
	urlretrieve(src, "tips_3/" + filename)

実行が完了したら、tips_3ディレクトリをと、画像がダウンロードされていることがわかります。
画像.png
交換手順は以下の通りです。
画像.png

  1. 保存するファイル名 (Web ページ ファイル) に置き換えます。
  2. ダウンロードする Web ページの URL に置き換えます。
  3. 画像を保存するフォルダーに置き換えます。フォルダーを作成する必要があります。

また、一部の Web サイトの画像は、最初に Web ページが表示された後に動的に読み込まれます。この種の動的に読み込まれるコンテンツの画像のダウンロードはサポートされていません。
コード リンク: https://github.com/AndersonH​​JB/AIYC_DATA/tree/main/01-Python%20ユニバーサル コード テンプレート: 10%20 実技を習得する必要があります/1.3%20 画像を一括ダウンロードします

「Python言語の個別指導クラス、C++の個別指導クラス、アルゴリズム・データ構造の個別指導クラス、子供向けプログラミング、pygameゲーム開発」などの個別指導クラスを開始し、すべてマンツーマン指導:マンツーマンの個別指導+マンツーマンオンワンQ&A+宿題+プロジェクト演習など QQ、WeChatオンライン、いつでも対応!V: ジアブデフ

最初に自己紹介をさせてください.編集者は2013年に交通大学を卒業し、小さな会社で働き、Huawei、OPPOなどの大規模な工場に行き、2018年にアリババに入社しました。ほとんどの初級および中級 Java エンジニアはスキルを向上させたいと考えており、多くの場合、自分で探求して成長したり、クラスに登録したりする必要がありますが、トレーニング機関の 10,000 元近くの授業料は本当にストレスです。私の体系化されていない独学は非常に非効率的で長く、天井にぶつかりやすく、技術が停止します。そのため、「Java 開発のための学習教材一式」を集めてみんなに配りました. 当初の意図も非常に単純です. つまり、独学で学びたいが、そうではない友人を助けたいということです.どこから始めればよいかを知ると同時に、全員の負担を軽減します。以下の名刺を追加して、学習教材の完全なセットを入手してください

おすすめ

転載: blog.csdn.net/m0_67394360/article/details/126062960