スクレイピング最新情報
注意:モジュール名と同じ名前でpyソースの名前にするのはNGだ!
文字化けまでは対応できたけど、ここからパーサー(lxml)で抽出を行う。まずはPCで、そしてラズパイでできるようにする。
windows7: Ipthon OK
VSCode(Windows7):OK
import requests
r = requests.get('http://lgs.jp/books')
r.encoding = r.apparent_encoding #ここが重要だ。おいらのホームページが化けてたからね。
print(r.text)
VS Codeって元々入っているAnacondaと環境が違うのか?モジュールをpipでインポートしないと駄目なんだけど?どちらでも同じだった・・・。venvでやったからか。そこにはまだ不足だということか。つまりvenvで作成のプロジェクトには見当たらないから入れろと。
VS Codeで新たに作成したvenvでやってみたが問題なく以前に入れたimportが有効だった。
>python -m venv 名前<–これがフォルダ名となる
>.\venv\scripts\activate <–これが要る
コード補間はできる
>.\venv\Scripts\activate
コード補間はできない
(venv) xxx>deactivate
ううむ分からないな。うまく行ってしまってるぞ・・・。venvを真面目にやらないと駄目だ。結構重要だ!
#!/usr/bin/env python # coding: utf-8 import requests import json def get_weather(): url = 'http://weather.livedoor.com/forecast/webservice/json/v1' payload = {'city': '120010'} # Kobe data = requests.get(url, params = payload).json() print(data['title']) for weather in data['forecasts']: print(weather['dateLabel'] + ':' + weather['telop']) return if __name__ == '__main__': get_weather()
# coding: UTF-8 #import lxml import urllib3 from bs4 import BeautifulSoup url = "http://www.nikkei.com/" html = urllib3.urlopen(url) #target_url = 'https://lgs.jp/books/' #r = requests.get(target_url) #requestsを使って、webから取得 #soup = BeautifulSoup(r.text, 'lxml') #要素を抽出 #for a in soup.find_all('a'): # print(a.get('href')) #リンクを表示
# -*- coding: utf-8 -*- from bs4 import BeautifulSoup import requests import urllib3 url = "http://www.nikkei.com/" # requestsを使うならこっち r = requests.get(url) # urllib3を使うならこっち http = urllib3.PoolManager() r = http.request('GET', url) soup = BeautifulSoup(r.data, 'html.parser') # タイトル要素を取得する → <title>経済、株価、ビジネス、政治のニュース:日経電子版</title> title_tag = soup.title # 要素の文字列を取得する → 経済、株価、ビジネス、政治のニュース:日経電子版 title = title_tag.string # タイトル要素を出力 print(title_tag) # タイトルを文字列を出力
Tips:lxmlは速度が早いのでおすすめです.ここで,注意すべきことは,文字化けです.
Requestsのr.encodingやr.textをそのまま使うと、文字化けしやすくなります。 回避できる方法は以下2つです.
(1)Chardetをインストールしておく
(2)BeautifulSoup()にr.contentを渡してBeautiful Soup側でデコードする
Chardetをインストールすると,大体の場合文字化けを回避できます。シンプルなのでオススメです。