首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python BeautifulSoup

Python BeautifulSoup
EN

Stack Overflow用户
提问于 2014-05-03 16:24:28
回答 1查看 4.7K关注 0票数 3

我是BeautifulSoup的新手,并试图从以下网站提取数据:http://www.expatistan.com/cost-of-living/comparison/phoenix/new-york-city

我试图提取每个类别(食物、住房、衣服、交通、个人护理和娱乐)的汇总百分比。因此,就以上所提供的链接而言,我想提取的百分比是: 48%、129%、63%、43%、42%、42%和72%。

不幸的是,我使用BeautifulSoup的当前Python代码提取了以下百分比: 12%、85%、63%、21%、42%和48%。我不知道为何会这样。这里的任何帮助都将不胜感激!这是我的代码:

代码语言:javascript
运行
复制
import urllib2
from bs4 import BeautifulSoup
url = "http://www.expatistan.com/cost-of-living/comparison/phoenix/new-york-city"
page  = urllib2.urlopen(url)
soup_expatistan = BeautifulSoup(page)
page.close()

expatistan_table = soup_expatistan.find("table",class_="comparison")
expatistan_titles = expatistan_table.find_all("tr",class_="expandable")

for expatistan_title in expatistan_titles:
    published_date = expatistan_title.find("th",class_="percent")
    print(published_date.span.string)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-03 18:14:16

我无法确定确切原因,但这似乎是一个与urllib2有关的问题。只需更改为requests,它就开始工作了。以下是代码:

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup

url = "http://www.expatistan.com/cost-of-living/comparison/phoenix/new-york-city"
page  = requests.get(url).text
soup_expatistan = BeautifulSoup(page)

expatistan_table = soup_expatistan.find("table", class_="comparison")
expatistan_titles = expatistan_table.find_all("tr", class_="expandable")

for expatistan_title in expatistan_titles:
    published_date = expatistan_title.find("th", class_="percent")
    print(published_date.span.string)

您可以使用pip来安装requests

代码语言:javascript
运行
复制
$ pip install requests

编辑

这个问题确实与urllib2有关。根据请求中的用户代理设置,www.expatistan.com服务器的响应似乎不同。为了获得与urllib2相同的响应,您必须执行以下操作:

代码语言:javascript
运行
复制
url = "http://www.expatistan.com/cost-of-living/comparison/phoenix/new-york-city"
request = urllib2.Request(url)
opener = urllib2.build_opener()
request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0')
page = opener.open(request).read()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23446975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档