80行コード豆弁Top 250映画情報を取得し、csvおよびデータベースにエクスポート
ソースの表示
1ページをダウンロードして処理する
2データの抽出
このサイトhtml構造を観察する
このページの下にあるすべての映画がolラベルの下に含まれていることがわかります.各liラベルには、単一の映画の内容が含まれています.
XPath文を使用してolラベルを取得
olラベルに各liラベルを巡回して、単一の映画の情報を取得します.
映画の名前を例にとると
残りの部分はソースコードを参照
3ページジャンプ
「後ページ」タブを確認します.次のページに移動
Noneに戻ると、すべてのページが取得されます.
4 csvのインポート
csvファイルの作成
残りの部分はソースコードを参照
5データベースのインポート(mysqlを例に)まずmysqlにデータベースとテーブルを作成し、テーブルの属性は挿入するデータと一致しなければならない 接続データベース を作成する.取得した映画情報をデータベース にインポートする.
6効果表示
WindowsシステムはデフォルトでANSI符号化でExcelを開くため、直接Excelでcsvファイルを開くと文字化けしてしまい、再符号化する必要があります.
以上の内容はすべて80行Pythonコード内で完了できるので、簡単でしょう.(`・ω・´)
1ページをダウンロードして処理する
DOWNLOAD_URL = 'http://movie.douban.com/top250/'
html = requests.get(url).text
tree = lxml.html.fromstring(html)
2データの抽出
このサイトhtml構造を観察する
このページの下にあるすべての映画がolラベルの下に含まれていることがわかります.各liラベルには、単一の映画の内容が含まれています.
XPath文を使用してolラベルを取得
movies = tree.xpath("//ol[@class='grid_view']/li")
olラベルに各liラベルを巡回して、単一の映画の情報を取得します.
映画の名前を例にとると
for movie in movies:
name_num = len(movie.xpath("descendant::span[@class='title']"))
name = ''
for num in range(0, name_num):
name += movie.xpath("descendant::span[@class='title']")[num].text.strip()
name = ' '.join(name.replace('/', '').split()) #
残りの部分はソースコードを参照
3ページジャンプ
「後ページ」タブを確認します.次のページに移動
next_page = DOWNLOAD_URL + tree.xpath("//span[@class='next']/a/@href")[0]
Noneに戻ると、すべてのページが取得されます.
4 csvのインポート
csvファイルの作成
writer = csv.writer(open('movies.csv', 'w', newline='', encoding='utf-8'))
fields = ('rank', 'name', 'score', 'country', 'year', 'category', 'votes', 'douban_url')
writer.writerow(fields)
残りの部分はソースコードを参照
5データベースのインポート(mysqlを例に)
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd=PWD, db='douban',charset='utf8')
カーソルcur = db.cursor()
sql = "INSERT INTO test(rank, NAME, score, country, year, " \
"category, votes, douban_url) values(%s,%s,%s,%s,%s,%s,%s,%s)"
try:
cur.executemany(sql, movies_info)
db.commit()
except Exception as e:
print("Error:", e)
db.rollback()
6効果表示
WindowsシステムはデフォルトでANSI符号化でExcelを開くため、直接Excelでcsvファイルを開くと文字化けしてしまい、再符号化する必要があります.
以上の内容はすべて80行Pythonコード内で完了できるので、簡単でしょう.(`・ω・´)