首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用美观汤解析数据

使用美观汤解析数据
EN

Stack Overflow用户
提问于 2014-08-14 03:21:09
回答 1查看 420关注 0票数 2

我正在学习BS4,我正在尝试从流行的站点中抓取几个表、列表等,以使自己熟悉th语法。我有一个困难的时间得到一个正确的格式列表。这是代码:

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

headers = {
  'Connection': 'keep-alive',
  'Cache-Control': 'no-cache',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'Pragma': 'no-cache',
  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
  'Accept-Language': 'en-US,en;q=0.8'
}

url = 'https://www.yahoo.com'

req = urllib2.Request(url, None, headers)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
terms = soup.find('ol').get_text()
print terms

它打印以下列表:

代码语言:javascript
复制
1Amanda Knox2Meagan Good3Dog the Bounty Hunter4Adrienne Bailon5Powerball winner6Gillian Anderson7Catherine Zeta-Jones8Mickey Rourke9Halle Berry10Lake Tahoe hotels

正确的术语由数字分隔,这将增加一个额外的工作级别,以解析该文件,使其读到kike "Amanda Knox“、"Megan Good”等等。

因为我对BS4不是很熟悉,所以在我对术语的定义中有什么方法可以在"tile=“标签之后得到这些术语吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-14 03:25:02

这是因为ol标记中有多个元素,get_text()加入了每个标记的文本。

相反,您可以使用CSS Selector来获取实际的术语:

代码语言:javascript
复制
for li in soup.select('ol.trendingnow_trend-list > li > a'):
    print li.get_text()

指纹:

代码语言:javascript
复制
Hope Solo
Christy Mack
Dog the Bounty Hunter
Adrienne Bailon
Powerball winner
Catherine Zeta-Jones
Mickey Rourke
Valerie Velardi
Halle Berry
Lake Tahoe hotels

ol.trendingnow_trend-list > li > a css选择器将直接位于li内部的每个a标记与trendingnow_trend-list类属性匹配,后者就在ol标记内。

FYI,这是从右上角的块中获取Trending Now术语的列表。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25299497

复制
相关文章

相似问题

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