首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BeautifulSoup的抓取范围

使用BeautifulSoup的抓取范围
EN

Stack Overflow用户
提问于 2015-12-19 22:41:07
回答 2查看 311关注 0票数 0

我试着用BeautifulSoup抓取"span“标签。这是我的代码..

代码语言:javascript
复制
import urllib
from bs4 import BeautifulSoup
url="someurl"
res=urllib.urlopen(url)
html=res.read()
soup=BeautifulSoup(html,"html.parser")
soup.findAll("span")

但是当我这样做的时候,对于一些特定的网页。它没有列出所有的跨度。它只显示有限的否。跨度。但当我这么做的时候

代码语言:javascript
复制
soup.prettify()

它包含所有的跨度..可能的原因是什么?我是不是错过了什么?还有一些我发现的答案是使用"htmlunit“这样的无头浏览器。但我不确定它们到底是什么?我可以将它们集成到我的django项目中吗?

soup.prettify给了https://drive.google.com/file/d/0BxhTzDujWhPVTzdIS2VWd1pZcHM/view?usp=sharing

跨度的期望输出(“soup.findAll”)

代码语言:javascript
复制
list of all the spans

输出im获取

代码语言:javascript
复制
[<span class="ssc-ftpl ssc_ga_tag" data-gaa="Opened" data-gac="Footer" data-gal="Responsible Gambling" tabindex="0"> Responsible Gambling</span>, <span class="ssc-ftpl ssc_ga_tag" data-gaa="Opened" data-gac="Footer" data-gal="About Betfair" tabindex="0"> About Betfair</span>, <span class="ssc-ftpl ssc-ftls " tabindex="0">English - UK</span>, <span class="ssc-ftpl" tabindex="0">\xa9 \xae</span>]
EN

回答 2

Stack Overflow用户

发布于 2015-12-23 07:10:54

终于找到了解决方案..问题出在默认的"html.parser",它不能处理。使用"html5lib“进行解析。并得到想要的结果。

代码语言:javascript
复制
soup=BeautifulSoup(html,"html5lib")
soup.findAll("span")

html5lib解析器完全按照浏览器的方式解析页面。

票数 1
EN

Stack Overflow用户

发布于 2015-12-20 23:22:30

也许你正在尝试抓取一个不同的页面,但我在抓取那个站点时没有问题。下面是我的代码:

代码语言:javascript
复制
url='https://www.betfair.com/sport/football'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)

test = soup.find_all('span')
for span in test:
    print(span)

这产生了一个很大的跨度列表,包括线/分数,这是我认为您会感兴趣的:

代码语言:javascript
复制
<span class="ssc-lkh"></span>
<span>Join Now</span>
<span class="new flag-en"></span>
<span class="new flag-en"></span>
<span class="sportIcon-6423"></span>
<span class="sportName">American Football</span>
<span class="sportIcon-3988"></span>
<span class="sportName">Athletics</span>
<span class="sportIcon-61420"></span>
.....

响应下面的评论更新了

下面是一些修改后的代码,以显示我的代码确实可以拉入您需要的span

代码语言:javascript
复制
url='https://www.betfair.com/sport/football'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)

test = soup.find_all('span',attrs={"class":"away-team-name"}) 
for span in test:
    print("away team" + span.text)

产生:

代码语言:javascript
复制
away team
Marseille

away team
Lazio

away team
Academica

away team
Canada (W)

away team
Arnett Gardens FC

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

https://stackoverflow.com/questions/34371924

复制
相关文章

相似问题

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