Я сделал несколько базовых операций с использованием BeautifulSoup и urllib.Однако недавно я наткнулся на эту ссылку, в которой говорилось, что все, что вам нужно сделать, чтобы очистить веб-страницу, например эту , нужно запустить:
import pandas as pd
tables = pd.read_html("https://apps.sandiego.gov/sdfiredispatch/")
print(tables[0])
Я думалэто слишком хорошо, чтобы быть правдой, так как я часто борюсь с Beautifulsoup и urllib2.
Я пытался вытащить таблицу на этой странице:
url = "http://crdd.osdd.net/raghava/ahtpdb/display.php?details=1001"
tables = pd.read_html(url)
print tables[0]
и я получил вывод:
0
0 Detailed description of 1001 ID
Я также пробовал некоторые другие методы, например:
url = "http://crdd.osdd.net/raghava/ahtpdb/display.php?details=1001"
response = requests.get(url)
print response.content
или что-то вроде:
web_page = 'http://crdd.osdd.net/raghava/ahtpdb/display.php?details=1001'
page = urllib2.urlopen(web_page)
soup = BeautifulSoup(page, 'html.parser')
print soup.get_text()
Я знаю, что существует множество примеров веб-скребков, использующих различные методы, как правило, здесь.Как вы можете видеть, я следил за этими примерами, просто я не могу заставить этот метод работать именно для моей проблемы.Если бы кто-нибудь мог показать мне, как они улучшат любой из этих фрагментов кода для моих нужд, я был бы признателен.
Редактировать 1: В качестве примечания я пробовал тот же код на другой веб-странице: https://dbaasp.org/peptide-card?id=3, но я думаю, что это еще сложнее.
Редактировать 2: Есть нечто необычное, основанное на предложении Рафи.Я приложил веб-страницу и URL, который я пытаюсь очистить ;Рафи, вы можете видеть, что мой URL немного отличается от того, что вы использовали.А потом, когда я попытался запустить ваше предложение по моему URL:
url = "http://crdd.osdd.net/raghava/ahtpdb/srcbr.php?details=1001"
table = pd.read_html(url)
print table[0]
print table[1]
print table[2]
print table[3]
print table[4]
print table[5]
Вывод, который я получаю, выглядит следующим образом (усечено):
Browse SOURCE in AHTPDB This page gives statis...
1 Browse SOURCE in AHTPDB
2 This page gives statistics of SOURCE fields an...
3 Following table enlists the number of entries ...
4 Following table enlists the number of entries ...
5 Milk
6 834
7 google.load("visualization", "1", {packages:["...
1 \
0 Browse SOURCE in AHTPDB
1 NaN
2 NaN
3 Following table enlists the number of entries ...
4 NaN
5 Casein
6 723
7 NaN
2 \
0 This page gives statistics of SOURCE fields an...
1 NaN
2 NaN
3 Milk
4 NaN
5 Bovine
6 477
7 NaN
3 \
0 Following table enlists the number of entries ...
1 NaN
2 NaN
3 Casein
4 NaN
5 Cereals
6 419
7 NaN
4 5 6 \
0 Following table enlists the number of entries ... Milk Casein
1 NaN NaN NaN
2 NaN NaN NaN
3 Bovine Cereals Fish
4 NaN NaN NaN
5 Fish Pork Human
6 384 333 215
7 NaN NaN NaN
7 8 9 \
0 Bovine Cereals Fish
1 NaN NaN NaN
2 NaN NaN NaN
3 Pork Human Chicken
4 NaN NaN NaN
5 Chicken Soybean Egg
6 177 159 97
7 NaN NaN NaN
... 16 17 18 \
0 ... 723.0 477.0 419.0
1 ... NaN NaN NaN
2 ... NaN NaN NaN
3 ... 384.0 333.0 215.0
4 ... NaN NaN NaN
5 ... NaN NaN NaN
6 ... NaN NaN NaN
7 ... NaN NaN NaN
19 20 21 22 23 24 \
0 384.0 333.0 215.0 177.0 159.0 97.0
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN
3 177.0 159.0 97.0 NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN
25
0 google.load("visualization", "1", {packages:["...
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
[8 rows x 26 columns]
0
0 Browse SOURCE in AHTPDB
0
0 This page gives statistics of SOURCE fields an...
0 \
0 Following table enlists the number of entries ...
1 Following table enlists the number of entries ...
2 Milk
3 834
4 google.load("visualization", "1", {packages:["...
1 2 3 4 \
0 Following table enlists the number of entries ... Milk Casein Bovine
1 NaN NaN NaN NaN
2 Casein Bovine Cereals Fish
3 723 477 419 384
4 NaN NaN NaN NaN
5 6 7 8 9 ... 12 13 14 \
0 Cereals Fish Pork Human Chicken ... 834.0 723.0 477.0
1 NaN NaN NaN NaN NaN ... NaN NaN NaN
2 Pork Human Chicken Soybean Egg ... NaN NaN NaN
3 333 215 177 159 97 ... NaN NaN NaN
4 NaN NaN NaN NaN NaN ... NaN NaN NaN
15 16 17 18 19 20 21
0 419.0 384.0 333.0 215.0 177.0 159.0 97.0
1 NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN
Я не понимаю, как этопохож на скриншот, который я показал?Это потому, что 'details = 1001' блокирует этот метод, потому что он не написан как страница .php?
Редактировать 3: Это работает:
url = 'http://crdd.osdd.net/raghava/ahtpdb/display.php?details=1001'
html = urllib.urlopen(url).read()
bs = BeautifulSoup(html, 'lxml')
tab = bs.find("table",{"class":"tab"})
data = []
rows = bs.find_all('tr')
for row in rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele])
print data