Вы можете использовать запросы модуль. Существует проблема с получением текста BCS Class (logP) , поскольку HTML-код разбит на обе данные таблицы BCS Class . Решение заключается в использовании html5lib
в качестве парсера.
import requests
from bs4 import BeautifulSoup
import re
headers = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Origin': 'http://www.ddfint.net',
'Upgrade-Insecure-Requests': '1',
'DNT': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/77.0.3865.90 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3',
'Referer': 'http://www.ddfint.net/search.cfm',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ru,en-US;q=0.9,en;q=0.8,tr;q=0.7',
}
data = {
'compoundName': 'Abacavir',
'category': '',
'subcategory': '',
'Submit': 'Search'
}
response = requests.post('http://www.ddfint.net/results.cfm', headers=headers, data=data, verify=False)
page = BeautifulSoup(response.text, 'html5lib')
print(page.find("td", text="Lowest Solubility (mg/ml):").find_next_sibling("td").text)
# get header row
header_row = page.find("td", text="Country List:").find_parent("tr")
# get columns names, remove : and *
header_data = [re.sub("[:*]", "", td.text.strip()) for td in header_row.find_all("td")]
country_index = header_data.index("Country List")
solubility_index = header_data.index("Solubility")
bcs_class_clogp_index = header_data.index("BCS Class (cLogP)")
bcs_class_logp_index = header_data.index("BCS Class (logP)")
row = header_row
while True:
# check if next row exist
row = row.find_next_sibling("tr")
if not row:
break
# collect row data
row_data = [td.text.strip() for td in row.find_all("td")]
print(row_data[country_index], row_data[solubility_index],
row_data[bcs_class_clogp_index], row_data[bcs_class_logp_index])
Код с пандами :
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
headers = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Origin': 'http://www.ddfint.net',
'Upgrade-Insecure-Requests': '1',
'DNT': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/77.0.3865.90 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3',
'Referer': 'http://www.ddfint.net/search.cfm',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ru,en-US;q=0.9,en;q=0.8,tr;q=0.7',
}
data = {
'compoundName': 'Abacavir',
'category': '',
'subcategory': '',
'Submit': 'Search'
}
response = requests.post('http://www.ddfint.net/results.cfm', headers=headers, data=data, verify=False)
page = BeautifulSoup(response.text, 'html5lib')
print(page.find("td", text="Lowest Solubility (mg/ml):").find_next_sibling("td").text)
# get header row
header_row = page.find("td", text="Country List:").find_parent("tr")
# get columns names, and remove : and *
header_data = [re.sub("[:*]", "", td.text.strip()) for td in header_row.find_all("td")]
# loop while there's row after header row
data = []
row = header_row
while True:
# check if next row exist
row = row.find_next_sibling("tr")
if not row:
break
# collect row data
row_data = [td.text.strip() for td in row.find_all("td")]
data.append(row_data)
# create data frame
df = pd.DataFrame(data, columns=header_data)