我试图以编程方式提取此网页描述在公共档案基因组组装的文字:如何使用python 2.7从网页中提取文本?
http://www.ebi.ac.uk/ena/data/view/ERS019623
我有成千上万的组件,我想追查并提取研究的加入,其是以“PRJ”开头的表格最左侧的代码。这些程序集中的每一个程序集的URL都与上述格式相同,即“http://www.ebi.ac.uk/ena/data/view/ERS ******”。我有我的每个程序集的ERS代码,因此我可以为每个程序集构建URL。
我已经尝试了几种不同的方法,首先如果您在URL的末尾添加“& display = XML”,它会打印XML(或者至少我假设它打印整个页面的XML ,因为问题是研究加入“PRJ ******”在这里没有地方可以看到)。我利用这个来提取,我从相同的网页,运行加入这是格式总是需要另一个代码“ERR ******”使用下面的代码:
import urllib2
from bs4 import BeautifulSoup
import re
import csv
with open('/Users/bj5/Desktop/web_scrape_test.csv','rb') as f:
reader = csv.reader(f) #opens csv containig list of ERS numbers
for row in reader:
sample = row[0] #reads index 0 (1st row)
ERSpage = "http://www.ebi.ac.uk/ena/data/view/" + sample + "&display=xml" #creates URL using ERS number from 1st row
page = urllib2.urlopen(ERSpage) #opens url and assigns it to variable page
soup = BeautifulSoup(page, "html.parser") #parses the html/xml from page and assigns it to variable called soup
page_text = soup.text #returns text from variable soup, i.e. no tags
ERS = re.search('ERS......', page_text, flags=0).group(0) #returns first ERS followed by six wildcards
ERR = re.search('ERR......', page_text, flags=0).group(0) #retursn first ERR followed by six wildcards
print ERS + ',' + ERR + ',' + "http://www.ebi.ac.uk/ena/data/view/" + sample #prints ERS,ERR,URL
这个工作非常出色,但作为研究加入不在XML中,我不能用它来访问这个。
我也试图再次使用BeautifulSoup通过这样做来下载HTML:
from bs4 import BeautifulSoup
from urllib2 import urlopen
BASE_URL = "http://www.ebi.ac.uk/ena/data/view/ERS019623"
def get_category_links(section_url):
html = urlopen(section_url).read()
soup = BeautifulSoup(html, "lxml")
print soup
get_category_links(BASE_URL)
但我又看不到研究加入输出从这个要么...
我也试图使用不同的python模块lxml来解析XML和HTML,但在这里也没有任何运气。
当我右键单击并检查页面上的元素,我可以通过按Ctrl + F - > PRJ找到研究加入。
所以我的问题是:什么是我期待在检查元素,XML或HTML(或别的东西)的代码?当我尝试使用BeautifulSoup解析HTML时,为什么它与我的控制台中打印的代码看起来不同?最后,我怎样才能从这些网页上刮取学习资料(PRJ ******)?
(我只是一直在编码一两个月,我完全是自学成才所以道歉这个问题的轻度的意识模糊性质,但我希望我已经跨越它是什么,我想有。做任何建议或意见,将不胜感激)
大多数情况下,当你在浏览器中不同的内容比你做编程的HTTP请求是什么,那是因为你要找的是通过一些JavaScript代码中动态生成的内容 - 你的浏览器执行,但不是你自己的代码。你可以尝试使用像硒这样的东西来获得完整的内容。 –