Я пытаюсь программно извлечь текст из этой веб-страницы, которая описывает сборку генома в общественном архиве:Как извлечь текст с веб-страницы с помощью 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-адрес для каждого из них.
Я пробовал несколько разных методов, во-первых, если вы добавили « display = XML» в конец URL-адреса, он печатает 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)
Но опять-таки я не могу видеть исследование присоединения на выходе из этого либо ...
I также попытались использовать другой модуль python, lxml, для синтаксического анализа XML и HTML, но им также не повезло.
Когда я нажимаю правой кнопкой мыши и проверяю элемент на странице, я могу найти учебное заведение, выполнив ctrl + F -> PRJ.
Итак, мой вопрос: что такое код, который я просматриваю при проверке элемента, XML или HTML (или что-то еще)? Почему он отличается от кода, который печатает на моей консоли, когда я пытаюсь использовать BeautifulSoup для синтаксического анализа HTML? И, наконец, как я могу очистить вступительные экзамены (PRJ ******) с этих веб-страниц?
(Я только кодировал несколько месяцев, и я полностью самоучкам, поэтому приношу извинения за слегка запутанную природу этого вопроса, но я надеюсь, что у меня получилось, что я пытаюсь Любые предложения или советы были бы высоко оценены.)
Чаще всего, когда вы получаете различный контент в своем браузере, чем то, что вы получаете программным запросом HTTP, это связано с тем, что содержимое, которое вы ищете, генерируется динамически с помощью некоторого кода javascript - который ваш браузер выполняет, но не ваш собственный код. Вы можете попробовать и использовать что-то вроде селена, чтобы получить полный контент. –