読者です 読者をやめる 読者になる 読者になる

日に日に分からんことが増えていく…

プログラマー初心者としての日々を学んでいることを記録していく。

Basic認証を通したURLのテキスト取得

Python2

Python2にてrequestsとbs4使用する

あるcsvファイルからurlを取得し、別のcsvファイルにGetしたhtml結果を出力する。
.find("a")でも、.aでも取得可能らしい。

import urllib2
import requests
from bs4 import BeautifulSoup
import csv


top_level_url = "http://[top_level_url名]/"
username = "[user名]"
password = "[passwd名]"

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, top_level_url, username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)


csv_reader = csv.reader(open(
    '[読み込みcsv名]', "rb"), delimiter=",", quotechar='"')

# 読み込みcsvの一列目に取得したいテキストのあるURL名を入力

with open('[書き込みcsv名]', 'awb') as f:
    for row in csv_reader:
        csvWriter = csv.writer(f)
        try:
            if row[0] == "":
                csvWriter.writerow([0]+[i for i in row])
                continue
            r = requests.get(row[0])
            soup = BeautifulSoup(r.text.encode(r.encoding))
            labels = soup.find(id='[id名]').find_all('[lavel名]')
            listdata = [i for i in row]
            for el in labels:
                listdata.append(el.text.encode("utf-8"))
            count_list = len(listdata)-len(row)
            csvWriter.writerow([count_list]+listdata)

        except Exception as e1:
            print e1
            listdata.append(message.text.encode('utf-8'))
            csvWriter.writerow([0]+listdata)