find_all с несколькими атрибутами - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу найти все ссылки на странице, этот код получает только ссылки, начинающиеся с http://, однако большинство ссылок https:// как я могу отредактировать код ниженайти оба?

for link in soup.find_all('a',attrs={'href':re.compile("^http://")}):

import requests,bs4,re
res=requests.get('https://www.nytimes.com/2018/11/21/nyregion/president-trump-immigration-law-firms.html?action=click&module=Top%20Stories&pgtype=Homepage')
soup=bs4.BeautifulSoup(res.text,'html.parser')
x=[]
y=[]
z=[]
for link in soup.find_all('a',attrs={'href':re.compile("^http://")}):
    print(link.get('href'))
    x=link.get('href')

Я знаю, что могу просто получить все ссылки, но я хотел получить и http://, и https:// в одном find_all

for i in soup.select('a'):
    print(i.get('href'))

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы можете использовать это регулярное выражение для сопоставления http или https:

^(http|https)://.*

Регулярное выражение (a|b) означает: шаблон совпадения a или b.

0 голосов
/ 22 ноября 2018

Вы хотите классифицировать вашу ссылку на http и https?найдите его, используя .startswith() или re.match()

http = []
https = []
for link in soup.find_all('a'):
    url = link.get('href')
    if url.startswith('http://'): # or: if re.match("^http://", url)
      http.append(url)
    else:
      # should be https://
      https.append(url)

print(https)
print(http)
...