BeautifulSoup返回不同的html而不是查看源

时间:2014-11-05 17:30:56

标签: python-2.7 web-scraping beautifulsoup

我是使用BeautifulSoup的新手,所以请原谅我,如果我的问题是愚蠢的。但是,自从早上6点以来,我一直在谷歌搜索和尝试每个stackoverflow线程中的建议,但无济于事。

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

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

当我将以下网址放入我的地址栏时,正确的网页会加载: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')

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

页面的某些部分由脚本标记中引用的Javascript加载,例如“摘要”。但是,您要查找的文本嵌入在HTML中。在Description标记之后找到文本可以使用以下代码:

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