BeautifulSoup - 使用find_all()在HTML中查找特定字符串

时间:2017-06-13 18:18:36

标签: python html web-scraping beautifulsoup

以下是我目前的代码:

from bs4 import BeautifulSoup

import requests

header = {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'}

url  = requests.get("https://d1baseball.com/scores/?date=20170407&c=PKzxg", headers = header).text

soup = BeautifulSoup(url, 'html.parser')

boxscores = soup.find_all('a', text = 'Box Score')

for eachboxscore in boxscores:
    links = eachboxscore.get('href')
    print(links)
    url = requests.get(links, headers = header).text
    soup = BeautifulSoup(url, 'html.parser')
    pbp = soup.find_all('a', text = {'Play-By-Play' or 'Play by Play' or 'Play By Play' or 'Play-by-Play'})
    print(pbp)
    for eachpbp in pbp:
        button = eachpbp.get('href')
        print(button)

我不确定我是否在这里正确实现逻辑运算符'或'。我希望能够在html中搜索'a'标签(对于for循环中的所有url - 在这种情况下有6个不同的链接)并找到Play-By-Play字符串的位置以找到相应的链接播放数据(注意,有时播放数据的链接只是另一个网址,而有时它可能只是重定向到同一网页上的另一个位置,例如:#play-by-play )。

然后会有一个快速的后续问题,如何“点击”此重定向链接?或者将它添加到我已经找到的网址的末尾会更容易吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

text=['Play-By-Play', 'Play by Play', 'Play By Play', 'Play-by-Play']

另见:

字符串参数使用字符串,您可以搜索字符串而不是 标签。与name和关键字参数一样,您可以传入 字符串,正则表达式,列表,函数或值True。 以下是一些例子:

  

soup.find_all(string="Elsie")

     

[U'杜']

     

soup.find_all(string=["Tillie", "Elsie", "Lacie"])

     

[你' Elsie',你' Lacie',你' Tillie']

     

soup.find_all(string=re.compile("Dormouse"))    [u"睡鼠的故事",   你"睡鼠的故事"]

     

def is_the_only_string_within_a_tag(s): """Return True if this string is the only child of its parent tag.""" return (s == s.parent.string)

     

soup.find_all(string=is_the_only_string_within_a_tag)

     

[你"睡鼠的故事",你"睡鼠的故事",你' Elsie',你' Lacie' ;,你' Tillie',你' ...']

尽管string用于查找字符串,但您可以将其与查找标记的参数结合使用:Beautiful Soup将查找其.string与您的字符串值匹配的所有标记。此代码查找.string为“Elsie”的标记:

  

soup.find_all("a", string="Elsie")

     

[Elsie]

字符串参数是Beautiful Soup 4.4.0中的新参数。在早期版本中,它被称为文本:

  

soup.find_all("a", text="Elsie")

     

[杜]