具有多个属性的find_all

时间:2018-11-22 03:45:23

标签: python python-3.x beautifulsoup findall

我想找到页面上的所有链接,此代码仅获取以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 :(得分:0)

您要将链接分为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)

答案 1 :(得分:0)

您可以使用此正则表达式来匹配httphttps

^(http|https)://.*

正则表达式(a|b)的意思是:匹配模式ab