2014-11-05 49 views
1

我是使用BeautifulSoup的全新的,所以如果我的问题是愚蠢的,请原谅我。然而,我一直在谷歌搜索和尝试建议,在每一个stackoverflow线程我可以从早上6点,但无济于事。BeautifulSoup返回不同的HTML比查看来源

我的问题是我有一个基因名称的.csv文件,其中一些是ensEMBL格式,这意味着我必须使用ensembl数据库来查找我需要的信息。其余的我可以使用ncbi数据库。

现在,我的代码很好。我知道这一点,因为发送给ncbi的每个查询都会返回我需要的信息,并且我可以使用BeautifulSoup将其全部提取出来并输出到csv。但是,无论是urlopen还是BeautifulSoup都没有按照我所了解的方式工作。

当我把下面的URL放到我的地址栏中时,正确的网页加载:http://uswest.ensembl.org/Gallus_gallus/Gene/Summary?db=core;g=ENSGALG00000016955;r=1:165302186-165480795;t=ENSGALT00000027404

我可以查看源代码并查看HTML。然而,当我有:

html = urlopen(http://uswest.ensembl.org/Gallus_gallus/Gene/Summary?db=core;g=ENSGALG00000016955;r=1:165302186-165480795;t=ENSGALT00000027404, 'lxml') 

它输出的HTML根本不是我在我的浏览器中加载相同的URL并查看源代码时得到的。我知道对于使用javascript的页面,inspect元素和视图源将有所不同,但urlopen应始终返回与视图源相同的HTML。

我需要在“说明”之后提取字符串。访问浏览器中的链接,我可以查看源代码并查看我需要使用BeautifulSoup查找的代码;然而,除非urlopen正常工作并返回正确的HTML,否则我无能为力。我的RA工作取决于今晚完成这项工作。

有什么建议吗?

回答

1

页面的各个部分由脚本标记中引用的Javascript加载,例如“摘要”。但是,您正在查找的文本嵌入在HTML中。定位描述标记后面的文本与此代码一起工作:

import requests 
from bs4 import BeautifulSoup 

url = "http://uswest.ensembl.org/Gallus_gallus/Gene/Summary?db=core;g=ENSGALG00000016955;r=1:165302186-165480795;t=ENSGALT00000027404" 
r = requests.get(url, timeout=5) 
html = BeautifulSoup(r.text) 
description = html.find("div", {'class': "rhs"}) 
print description.text 
+0

奇妙地工作。由于我是网络抓取/抓取的新手,任何信息都可以帮到你。你可以分享为什么“requests.get(url)”和html = BeautifulSoup(r.text)返回当我右键单击并查看源代码时看到的HTML,但html = openurl(ensemblURL)没有?非常感谢你。 – 2014-11-05 20:26:30

+0

嗯,我不知道,也不打算进行调查,但现在每个人都在使用请求模块而不是urllib,因为它使用起来要容易得多。我确信你可以使它与urllib协同工作,但为什么要经历这个麻烦? – ofrommel 2014-11-05 20:33:47

+0

也请这么友善地标记我的答案是正确的。 – ofrommel 2014-11-05 21:01:02