Очистите параметры в функции onclick с помощью python

#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