Как извлечь конкретную ссылку с сайта, если на нем есть две ссылки: одна мне нужна, а другая - нет? - PullRequest
1 голос
/ 16 июня 2020

<td>
  <input type="hidden" name="ctl00$ContentPlaceHolder1$dlstCollege$ctl01$hdnInstituteId" id="ContentPlaceHolder1_dlstCollege_hdnInstituteId_1" value="866  " />
  <a id="ContentPlaceHolder1_dlstCollege_hlpkInstituteName_1" href="CollegeDetailedInformation.aspx?Inst=866  ">A.N.A INSTITUTE OF PHARMACEUTICAL SCIENCES & RESEARCH,BAREILLY (866)</a>

  <br />
  <b>Location:</b>
  <span id="ContentPlaceHolder1_dlstCollege_lblAddress_1">13.5 km Bareilly - Delhi road, near rubber factory agras road ,Bareilly</span>

  <br />
  <b>Course:</b>
  <span id="ContentPlaceHolder1_dlstCollege_lblCourse_1">B.Pharm,</span>
  <br />
  <b>Category:</b>
  <span id="ContentPlaceHolder1_dlstCollege_lblInstituteType_1">Private</span>
  <br />
  <b>Web Address:</b>

  <a id="lnkBtnWebURL" href='' target="_blank"></a>
  <br />
</td>
</tr>
<tr>
  <td>
    <input type="hidden" name="ctl00$ContentPlaceHolder1$dlstCollege$ctl02$hdnInstituteId" id="ContentPlaceHolder1_dlstCollege_hdnInstituteId_2" value="486  " />
    <a id="ContentPlaceHolder1_dlstCollege_hlpkInstituteName_2" href="CollegeDetailedInformation.aspx?Inst=486  ">A.N.A.COLLEGE OF ENGINEERING & MANAGEMENT,BAREILLY (486)</a>

    <br />
    <b>Location:</b>
    <span id="ContentPlaceHolder1_dlstCollege_lblAddress_2">13.5 Km. NH-24, Bareilly-Delhi Highway, Near Rubber Factory, Bareilly</span>

    <br />
    <b>Course:</b>
    <span id="ContentPlaceHolder1_dlstCollege_lblCourse_2">B.Tech,M.Tech,</span>
    <br />
    <b>Category:</b>
    <span id="ContentPlaceHolder1_dlstCollege_lblInstituteType_2">Private</span>
    <br />
    <b>Web Address:</b>

    <a id="lnkBtnWebURL" href='http://www.anacollege.org/index.html' target="_blank">http://www.anacollege.org/index.html</a>
    <br />
  </td>
</tr>

Я хочу извлечь определенный URL-адрес (например, CollegeDetailedInformation.aspx? Inst = 866) с этого веб-сайта, но в этом коде есть два тега, один из которых у меня нет хотите (например: http://www.anacollege.org/index.html).


res = requests.get('https://erp.aktu.ac.in/WebPages/KYC/CollegeList.aspx?City=&CType=&Cu=&Br=&Inst=&IType=')
soup = BeautifulSoup(res.content, 'html.parser')


table = soup.find("table", attrs = {'class':'table table-bordered table-responsive'})

pagelink = []
for anchor in table.findAll('a')[1:]:
        link = anchor['href']
        print(link)
        url = 'https://erp.aktu.ac.in/WebPages/KYC/'+ link
        pagelink.append(url)
print(pagelinks)

Я написал этот код, но он извлекает все ссылки

CollegeDetailedInformation.aspx?Inst=486  
http://www.anacollege.org/index.html
CollegeDetailedInformation.aspx?Inst=602  
http://www.aashlarbschool.com
CollegeDetailedInformation.aspx?Inst=032  
http://www.abes.ac.in
CollegeDetailedInformation.aspx?Inst=290  
http://www.abesit.in
CollegeDetailedInformation.aspx?Inst=913  
http://www.abesitpharmacy.in
CollegeDetailedInformation.aspx?Inst=643  
http://www.vitsald.com
CollegeDetailedInformation.aspx?Inst=1036 
http://www.abss.edu.in

как мне решить эту проблему Мне нужна только ссылка на CollegeDetailedInformation.aspx? Inst =? часть.

Ответы [ 5 ]

1 голос
/ 16 июня 2020

Вы можете использовать CSS selector и использовать его, чтобы найти все ссылки a[href*=CollegeDetailedInformation] Все, что вы хотите.

import requests
from bs4 import BeautifulSoup

res = requests.get('https://erp.aktu.ac.in/WebPages/KYC/CollegeList.aspx?City=&CType=&Cu=&Br=&Inst=&IType=')
soup = BeautifulSoup(res.content, 'html.parser')


table = soup.find("table", attrs = {'class':'table table-bordered table-responsive'})

allAnchor = table.select("a[href*=CollegeDetailedInformation]")

pagelink = []
for anchor  in allAnchor:
    link = anchor['href']
    # print(link)
    url = 'https://erp.aktu.ac.in/WebPages/KYC/'+ link
    pagelink.append(url)

print(pagelink)

Результат будет:

['https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=968  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=866  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=486  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=602  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=032  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=290  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=913  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=643  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=1036 ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=312  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=986  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=686  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=805  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=225  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=799  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=041  ',
'https://erp.aktu.ac.in/WebPages/KYC/CollegeDetailedInformation.aspx?Inst=952  ',

and so on....
]
1 голос
/ 16 июня 2020

Элементы привязки, которые являются ссылками для просмотра сведений о колледже, имеют атрибут id, который начинается с ContentPlaceHolder1_dlstCollege_. Так что передайте это как регулярное выражение в attrs аргумент из find_all():

import re

for anchor in table.findAll('a', attrs={"id": re.compile("^ContentPlaceHolder1_dlstCollege_.*")}):
    ...

Вы также можете просто передать это как id аргумент ключевого слова to find_all():

for anchor in table.findAll('a', id=re.compile("^ContentPlaceHolder1_dlstCollege_.*")):
    ...

Регулярное выражение можно сделать еще более конкретным c, например "^ContentPlaceHolder1_dlstCollege_hlpkInstituteName_.*", которое должно соответствовать только ссылке, предоставленной с названием колледжа.

( Я бы удалил [1:], который вы поставили в конце, поскольку это, вероятно, отфильтровывает ссылку в начале, которую вы не хотите. Если это не так, добавьте его обратно.)

0 голосов
/ 16 июня 2020

Вы можете использовать CSS селектор a[id*="dlstCollege"] для фильтрации только тех ссылок, которые вам нужны.

Например:

import requests as rq
from bs4 import BeautifulSoup

res = requests.get('https://erp.aktu.ac.in/WebPages/KYC/CollegeList.aspx?City=&CType=&Cu=&Br=&Inst=&IType=')
soup = BeautifulSoup(res.content, 'html.parser')


table = soup.find("table", attrs = {'class':'table table-bordered table-responsive'})

pagelink = []
for anchor in table.select('a[id*="dlstCollege"]')[1:]:
        link = anchor['href']
        print(link)
        url = 'https://erp.aktu.ac.in/WebPages/KYC/'+ link
        pagelink.append(url)

Выводит:

CollegeDetailedInformation.aspx?Inst=866  
CollegeDetailedInformation.aspx?Inst=486  
CollegeDetailedInformation.aspx?Inst=602  
CollegeDetailedInformation.aspx?Inst=032  
CollegeDetailedInformation.aspx?Inst=290  
CollegeDetailedInformation.aspx?Inst=913  
CollegeDetailedInformation.aspx?Inst=643  

...and so on.
0 голосов
/ 16 июня 2020

Попробуйте следующий фрагмент кода. Также установите библиотеку **lxml** с помощью pip перед продолжением

import requests as rq
from bs4 import BeautifulSoup as bs

es = rq.get('https://erp.aktu.ac.in/WebPages/KYC/CollegeList.aspx?City=&CType=&Cu=&Br=&Inst=&IType=')
soup = bs(res.content, 'lxml')

table = soup.find("table", attrs = {'class':'table table-bordered table-responsive'})


links = [elem.strip() for anchor in table.findAll('a') for _,elem in anchor.attrs.items() if "=" in elem]

print(links)
0 голосов
/ 16 июня 2020

Я не знаю Python, но общим правилом было бы заполнить массив в l oop, а затем выполнить поиск подстроки с вашим фильтром, выбрать индекс и захватить все, что находится в этот индекс.

Инициализировать и пустой массив за пределами l oop (если в Python разрешен пустой массив), заполните его в l oop, затем выполните что-то вроде in_array (для php) для ваш фильтр: CollegeDetailedInformation.aspx? Inst =?.

Это должно быть хорошим началом, так как на помощь приходят мастера Python.

...