80行コード豆弁Top 250映画情報を取得し、csvおよびデータベースにエクスポート


ソースの表示
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を例に)
  • まず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コード内で完了できるので、簡単でしょう.(`・ω・´)