#python #web-scraping #beautifulsoup
Вопрос:
Я пытался очистить веб-сайт с помощью python, но я не могу очистить параметры в функции onclick. HTML выглядит следующим образом
<table width="100%" border="0" cellpadding="5" cellspacing="1" class="tabsborder2">
<tbody><tr class="cleft-link1" height="20">
<td width="3%">S/N</td>
<td width="20%">Generic / Quantity</td>
<td width="3%">Type</td>
<td width="10%">Package Unit</td>
<td width="9%">Price(In Rs.)</td>
<td width="9%">Available Brands</td>
</tr>
<tr class="row">
<td height="20" valign="top" class="mosttext">1</td>
<td valign="top" class="mosttext">Aminophylline : 225 mg</td>
<td height="20" valign="top" class="mosttext">
Tablet </td>
<td height="20" valign="top" class="mosttext">10 Tablet</td>
<td height="20" valign="top" class="mosttext">5.09</td>
<td height="20" valign="top" class="mosttext">
<a href="#" onclick="MM_openBrWindow(amp;#39;searching_list_brands_npp.php?qty=959@225 mgamp;amp;gcount=1amp;#39;,amp;#39;amp;#39;,amp;#39;scrollbars=yes,width=800,height=600amp;#39;)"><img src="./__Welcome to Medguideindia.com____ Your Ultimate Medicine Guide_files/brand_icon.GIF" border="0"></a>
</td>
</tr>
<tr class="row">
<td height="20" valign="top" class="mosttext">2</td>
<td valign="top" class="mosttext">Vit E : 100 mg</td>
<td height="20" valign="top" class="mosttext">
Capsule </td>
<td height="20" valign="top" class="mosttext">10 Capsule</td>
<td height="20" valign="top" class="mosttext">5.34</td>
<td height="20" valign="top" class="mosttext">
<a href="#" onclick="MM_openBrWindow(amp;#39;searching_list_similar_brands.php?similarpid=131,259,315,666,944,1004,2955amp;amp;qty=131@100 mgamp;amp;gcount=1amp;#39;,amp;#39;amp;#39;,amp;#39;scrollbars=yes,width=800,height=600amp;#39;)"><img src="./__Welcome to Medguideindia.com____ Your Ultimate Medicine Guide_files/brand_icon.GIF" border="0"></a>
</td>
Мне удалось очистить текст в теге td, но они также не организованы.
Код:
page = requests.get(baseurl)
soup = BeautifulSoup(page.content, 'html5lib')
table = soup.find('table', attrs = {'class':'tabsborder2'})
for row in table.find_all('tr', attrs = {'class':'row'}):
m= {}
names = soup.find_all('td', attrs = {'class':'mosttext'})
for name in names:
text = name.text
m['Data'] = text
response= Selector(text=names)
link_id = response.xpath('//td/a[contains(@onclick, "MM_openBrWindow")]/@onclick').re_first( r'"([^"] )"')
df = df.append(m, ignore_index=True)
Проблема 1(важно)- Как очистить 1-е параметры в функции onclick?
Проблема 2 .Я хочу очистить содержимое и добавить его в фрейм данных, чтобы сохранить его в виде файла.csv. Но текст добавляется в фрейм данных в разных строках. Я попытался добавить их в строки, но это не сработало.
Может ли кто-нибудь предложить способ ее решения? Спасибо заранее.
Ответ №1:
Для анализа параметров из onclick=
параметра вы можете использовать следующий пример ( html_doc
это фрагмент HTML из вашего вопроса).:
import re
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
soup = BeautifulSoup(html_doc, "html.parser")
for tag in soup.select("[onclick]"):
onclick_url = re.search(r"'(.*?)'", tag["onclick"]).group(1)
p = parse_qs(urlparse(onclick_url).query)
print(p)
С принтами:
{'qty': ['959@225 mg'], 'gcount': ['1']}
{'similarpid': ['131,259,315,666,944,1004,2955'], 'qty': ['131@100 mg'], 'gcount': ['1']}
Комментарии:
1. Спасибо @andrej-kesely