如何使用Python和Beautiful Soup从框架中获取信息

如何使用Python和Beautiful Soup从框架中获取信息,python,beautifulsoup,screen-scraping,Python,Beautifulsoup,Screen Scraping,这是我第一次尝试抓取网页。我试着用漂亮的汤从雷蒙德·詹姆斯的网站上刮取电话号码。例如 每当我使用BeautifulSoup时,我都无法在HTML中找到适当的信息 import urllib2 from bs4 import BeautifulSoup url='http://www.raymondjames.com/office_locator_display.asp?addressline=90210' opener = urllib2.build_opener() opener.addh

这是我第一次尝试抓取网页。我试着用漂亮的汤从雷蒙德·詹姆斯的网站上刮取电话号码。例如

每当我使用BeautifulSoup时,我都无法在HTML中找到适当的信息

import urllib2
from bs4 import BeautifulSoup

url='http://www.raymondjames.com/office_locator_display.asp?addressline=90210'

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3)        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36')]
page_to_scrape=opener.open(url).read()
soup=BeautifulSoup(page_to_scrape.decode('utf-8','ignore'))
生成的输出不包含我需要的信息。我提供的URL似乎没有指向位置框


我不使用Python处理大量web数据,因此我不知道如何将Beautiful Soup导入“框架”以获取联系信息。

正如Martijn所说,深入挖掘网络请求,源数据就在那里。在本例中,它是对iframe中发出的GET请求的xml响应。有了这个url,解决方案非常简单:

import urllib2
from bs4 import BeautifulSoup
soup = BeautifulSoup(urllib2.urlopen('http://hosted.where2getit.com/raymondjames/ajax?&xml_request=%3Crequest%3E%3Cappkey%3E7BD67064-FC36-11E0-B80D-3AEEDDB2B31E%3C%2Fappkey%3E%3Cformdata+id%3D%22locatorsearch%22%3E%3Cdataview%3Estore_default%3C%2Fdataview%3E%3Climit%3E30%3C%2Flimit%3E%3Cgeolocs%3E%3Cgeoloc%3E%3Caddressline%3E90210%3C%2Faddressline%3E%3Clongitude%3E%3C%2Flongitude%3E%3Clatitude%3E%3C%2Flatitude%3E%3Ccountry%3E%3C%2Fcountry%3E%3C%2Fgeoloc%3E%3C%2Fgeolocs%3E%3Csearchradius%3E25%7C50%7C100%3C%2Fsearchradius%3E%3C%2Fformdata%3E%3C%2Frequest%3E'), 'lxml')
# parse the points of interest into a list
pois = soup.find_all('poi')
# now have your way with them!

我相信在浏览器加载页面后,会有额外的javascript代码加载地址列表。您必须使用浏览器开发人员工具分析页面。寻找可能包含这些地址的额外网络请求,并进行模拟。Mattexx,感谢您的帮助。我部分理解了逻辑,并且能够使用Chrome的开发工具找到url。有没有一种方法可以使用Python自动化发现url的过程?我想这个过程应该是这样的:获取get请求的xml响应,然后遍历URL以找到那些具有相关信息的URL,然后实际获取信息。我不知道如何使用Python来发现URL。因为它是用Javascript加载的,所以一个适合它的工具应该是一个无头浏览器,比如Selenium或PhantomJS。使用PhantomJS,我通过捕获网络请求和响应并以JSON格式显示它们,取得了不错的进展。相关链接始终为ID:60。现在只需将其与BeautifulSoup相结合,然后制作一个小脚本,遍历我感兴趣的邮政编码。谢谢你的指导。