Webサイトから毎日の日の出/日の入り時刻を取得したいのですが。PythonでWebコンテンツをスクレイピングすることは可能ですか?使用されているモジュールは何ですか?チュートリアルはありますか?
Webサイトから毎日の日の出/日の入り時刻を取得したいのですが。PythonでWebコンテンツをスクレイピングすることは可能ですか?使用されているモジュールは何ですか?チュートリアルはありますか?
回答:
鮮やかなBeautifulSoupライブラリと組み合わせてurllib2を使用します。
import urllib2
from BeautifulSoup import BeautifulSoup
# or if you're using BeautifulSoup4:
# from bs4 import BeautifulSoup
soup = BeautifulSoup(urllib2.urlopen('http://example.com').read())
for row in soup('table', {'class': 'spad'})[0].tbody('tr'):
tds = row('td')
print tds[0].string, tds[1].string
# will print date and sunrise
soup = BeautifulSoup(requests.get('http://example.com').text)
backticks
、コードの周りを忘れて、リンクに変換しました。ありがとう!
私は本当にスクレイピーをお勧めします。
削除された回答からの引用:
- (Twistedの上に)非同期操作を使用するため、スクレイピークロールはmechanizeよりも高速です。
- Scrapyは、libxml2に加えて(x)htmlを解析するためのより優れた最速のサポートを備えています。
- Scrapyは完全なUnicodeを備えた成熟したフレームワークであり、リダイレクト、gzip圧縮された応答、奇数のエンコーディング、統合されたhttpキャッシュなどを処理します。
- Scrapyに入ると、5分未満でスパイダーを作成して画像をダウンロードし、サムネイルを作成して、抽出したデータを直接csvまたはjsonにエクスポートできます。
私はWebスクレイピング作業のスクリプトをこのビットバケットライブラリにまとめました。
あなたのケースのスクリプト例:
from webscraping import download, xpath
D = download.Download()
html = D.get('http://example.com')
for row in xpath.search(html, '//table[@class="spad"]/tbody/tr'):
cols = xpath.search(row, '/td')
print 'Sunrise: %s, Sunset: %s' % (cols[1], cols[2])
出力:
Sunrise: 08:39, Sunset: 16:08
Sunrise: 08:39, Sunset: 16:09
Sunrise: 08:39, Sunset: 16:10
Sunrise: 08:40, Sunset: 16:10
Sunrise: 08:40, Sunset: 16:11
Sunrise: 08:40, Sunset: 16:12
Sunrise: 08:40, Sunset: 16:13
pyqueryをチェックすることを強くお勧めします。jqueryのような(別名cssのような)構文を使用しているため、そのバックグラウンドから来た人にとっては非常に簡単です。
あなたの場合、それは次のようになります:
from pyquery import *
html = PyQuery(url='http://www.example.com/')
trs = html('table.spad tbody tr')
for tr in trs:
tds = tr.getchildren()
print tds[1].text, tds[2].text
出力:
5:16 AM 9:28 PM
5:15 AM 9:30 PM
5:13 AM 9:31 PM
5:12 AM 9:33 PM
5:11 AM 9:34 PM
5:10 AM 9:35 PM
5:09 AM 9:37 PM
urllib2を使用してHTTPリクエストを作成すると、Webコンテンツが作成されます。
あなたはこのようにそれを得ることができます:
import urllib2
response = urllib2.urlopen('http://example.com')
html = response.read()
Beautiful Soupは、画面のスクレイピングに適しているはずのPython HTMLパーサーです。
特に、ここでは、HTML文書を解析する上でのチュートリアルです。
幸運を!
私はScrapemark(URLを見つける-py2)とhttlib2(画像をダウンロードする-py2 + 3)の組み合わせを使用しています。scrapemark.pyには500行のコードがありますが、正規表現を使用しているため、それほど速くない可能性があり、テストしていません。
あなたのウェブサイトをこする例:
import sys
from pprint import pprint
from scrapemark import scrape
pprint(scrape("""
<table class="spad">
<tbody>
{*
<tr>
<td>{{[].day}}</td>
<td>{{[].sunrise}}</td>
<td>{{[].sunset}}</td>
{# ... #}
</tr>
*}
</tbody>
</table>
""", url=sys.argv[1] ))
使用法:
python2 sunscraper.py http://www.example.com/
結果:
[{'day': u'1. Dez 2012', 'sunrise': u'08:18', 'sunset': u'16:10'},
{'day': u'2. Dez 2012', 'sunrise': u'08:19', 'sunset': u'16:10'},
{'day': u'3. Dez 2012', 'sunrise': u'08:21', 'sunset': u'16:09'},
{'day': u'4. Dez 2012', 'sunrise': u'08:22', 'sunset': u'16:09'},
{'day': u'5. Dez 2012', 'sunrise': u'08:23', 'sunset': u'16:08'},
{'day': u'6. Dez 2012', 'sunrise': u'08:25', 'sunset': u'16:08'},
{'day': u'7. Dez 2012', 'sunrise': u'08:26', 'sunset': u'16:07'}]
を使用してあなたの人生を容易にします CSS Selectors
パーティーに遅刻したことは知っていますが、あなたに良い提案があります。
を使用することBeautifulSoup
はすでに提案されていCSS Selectors
ますが、HTML内のデータをスクレイピングするために使用したい
import urllib2
from bs4 import BeautifulSoup
main_url = "http://www.example.com"
main_page_html = tryAgain(main_url)
main_page_soup = BeautifulSoup(main_page_html)
# Scrape all TDs from TRs inside Table
for tr in main_page_soup.select("table.class_of_table"):
for td in tr.select("td#id"):
print(td.text)
# For acnhors inside TD
print(td.select("a")[0].text)
# Value of Href attribute
print(td.select("a")[0]["href"])
# This is method that scrape URL and if it doesnt get scraped, waits for 20 seconds and then tries again. (I use it because my internet connection sometimes get disconnects)
def tryAgain(passed_url):
try:
page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
return page
except Exception:
while 1:
print("Trying again the URL:")
print(passed_url)
try:
page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
print("-------------------------------------")
print("---- URL was successfully scraped ---")
print("-------------------------------------")
return page
except Exception:
time.sleep(20)
continue
特定のカテゴリからアイテムの名前を取得することを考えている場合、CSSセレクターを使用してそのカテゴリのクラス名を指定することでそれを行うことができます。
import requests ; from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get('https://www.flipkart.com/').text, "lxml")
for link in soup.select('div._2kSfQ4'):
print(link.text)
これは部分的な検索結果です:
Puma, USPA, Adidas & moreUp to 70% OffMen's Shoes
Shirts, T-Shirts...Under ₹599For Men
Nike, UCB, Adidas & moreUnder ₹999Men's Sandals, Slippers
Philips & moreStarting ₹99LED Bulbs & Emergency Lights
これがシンプルなWebクローラーです。BeautifulSoupを使用しました。クラス名が_3NFO0dであるすべてのリンク(アンカー)を検索します。私はFlipkar.comを使用しました。これはオンライン小売店です。
import requests
from bs4 import BeautifulSoup
def crawl_flipkart():
url = 'https://www.flipkart.com/'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, "lxml")
for link in soup.findAll('a', {'class': '_3NFO0d'}):
href = link.get('href')
print(href)
crawl_flipkart()
Pythonには、ウェブをこするための優れたオプションがあります。フレームワークで最高のものは、スクレイピーです。初心者には少し注意が必要な場合があるので、ここで少し手助けします。
1. 3.5以上のpythonをインストールします(2.7までの下位のものは動作します)。
2. condaで環境を作成します(これを行いました)。
3.場所にスクレイピーをインストールし、そこから実行します。
4. Scrapy shell
コードをテストするためのインタラクティブなインターフェースを提供します。
5. Scrapy startproject projectname
フレームワークを作成します。
6. Scrapy genspider spidername
クモを作成します。クモは好きなだけ作成できます。これを行う間、プロジェクトディレクトリ内にいることを確認してください。
簡単なのは、リクエストと美しいスープを使うことです。開始する前に、1時間の時間をかけてドキュメントに目を通すことで、疑問のほとんどが解決されます。BS4は、ユーザーが選択できる幅広いパーサーを提供します。user-agent
とsleep
を使用すると、削り取りが簡単になります。BS4はbs.tagを返すので、を使用しますvariable[0]
。実行中のjsがある場合、リクエストとbs4を直接使用してスクレイピングすることはできません。APIリンクを取得してからJSONを解析し、必要な情報を取得するか、試しselenium
ます。