抓取同一 header/class 下的多个锚标签

Scraping multiple anchor tags which are under the same header/class

我正在尝试从 IMDB 中抓取热门剧集数据并提取节目名称和剧集名称。但是我遇到了一个问题,即节目名称和剧集名称都是位于同一 header 下的锚标签。 Screenshot of element

代码如下:

url = "https://www.imdb.com/search/title/?title_type=tv_episode&num_votes=1000,&sort=user_rating,desc&ref_=adv_prv"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

series_name = []
episode_name = []

episode_data = soup.findAll('div', attrs={'class': 'lister-item mode-advanced'})

for store in episode_data:
    sName = store.h3.a.text
    series_name.append(sName)
    # eName = store.h3.a.text
    # episode_name.append(eName)

有人知道如何解决这个问题吗?

在最后一部分你应该指定更多

for store in episode_data:
    h3=store.find('h3', attrs={'class': 'lister-item-header'})
    sName =h3.findAll('a')[0].text
    series_name.append(sName)
    eName = h3.findAll('a')[1].text
    episode_name.append(eName)

注意'attack of titan'的名字已经改成日文了!!和浏览器显示的html不一样,不知道为什么! ?!

您可以使用 find_all 然后通过它在列表中的索引调用它。或者您可以找到第一个锚标记,然后使用 find_next

Farhang 先于我找到 find_all() 解决方案。所以这里是 find_next

for store in episode_data:
    h3=store.find('h3', attrs={'class': 'lister-item-header'})
    sName =h3.find('a')[0].text
    series_name.append(sName)
    eName = h3.find('a').find_next('a').text
    episode_name.append(eName)