簡體   English   中英

在一個混亂的網站上使用美麗湯進行Python Web抓取

[英]Python Web-Scraping using Beautiful Soup on a messy Site

我想從該站點抓取以下三個數據點:%verified,FAR的數值和POD的數值。 我正嘗試在BeautifulSoup中執行此操作,但沒有在站點遍歷中進行練習,因此無法描述這些元素的位置。

這樣做最簡單的方法是什么?

如果尚未安裝Firebug for Firefox,並使用它來檢查頁面的html源。

結合使用urllibBeautifulSoup來處理html檢索和解析。 這是一個簡短的示例:

import urllib
from BeautifulSoup import BeautifulSoup

url = 'http://mesonet.agron.iastate.edu/cow/?syear=2009&smonth=9&sday=12&shour=12&eyear=2012&emonth=9&eday=12&ehour=12&wfo=ABQ&wtype[]=TO&hail=1.00&lsrbuffer=15&ltype[]=T&wind=58'
fp = urllib.urlopen(url).read()
soup = BeautifulSoup(fp)

print soup

從這里開始,我提供的鏈接應該為您提供一個良好的起點,讓您開始如何檢索您感興趣的元素。

就像That1Guy所說的一樣,您需要分析源頁面的結構。 在這種情況下,您很幸運...使用<span>將要查找的數字特別突出顯示為紅色。

這樣做:

>>> import urllib2
>>> import lxml.html
>>> url = ... # put your URL here
>>> html = urllib2.urlopen(url)
>>> soup = lxml.html.soupparser.fromstring(html)
>>> elements = soup.xpath('//th/span')
>>> print float(elements[0].text) # FAR
0.67
>>> print float(elements[1].text) # POD
0.58

注意lxml.html.soupparser幾乎等同於BeautifulSoup解析器(此刻我不需要處理)。

我最終自己解決了這一問題-我正在使用類似於isedev的策略,但我希望可以找到一種更好的方式來獲取“已驗證”數據:

import urllib2
from bs4 import BeautifulSoup

wfo = list()

def main():
    wfo = [i.strip() for i in open('C:\Python27\wfo.txt') if i[:-1]]
    soup = BeautifulSoup(urllib2.urlopen('http://mesonet.agron.iastate.edu/cow/?syear=2009&smonth=9&sday=12&shour=12&eyear=2012&emonth=9&eday=12&ehour=12&wfo=ABQ&wtype%5B%5D=TO&hail=1.00&lsrbuffer=15&ltype%5B%5D=T&wind=58').read())
    elements = soup.find_all("span")
    find_verify = soup.find_all('th')

    far= float(elements[1].text)
    pod= float(elements[2].text)
    verified = (find_verify[13].text[:-1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM