网页爬虫仅抓取首行内容问题求助
解决方法:抓取所有影片标题和链接
嗨,我来帮你看看问题出在哪~你的代码能运行但只抓首行,主要有两个小问题:
find_all("div", {"id": "movie_wide"})用错了:HTML里id是唯一标识,一个页面只会有一个id="movie_wide"的元素,所以find_all返回的列表里只有这一个div,循环只会跑一次。- 在单个div里只取了第一个
p标签:film.find('p')只会找到该div下的第一个<p>,自然只能拿到首条内容。
下面是修改后的代码,能抓取所有影片的标题和链接:
import requests from bs4 import BeautifulSoup URL = 'http://www.simplyscripts.com/genre/horror-scripts.html' def scarica_pagina(url): # 发送请求获取页面 page = requests.get(url) # 解析HTML soup = BeautifulSoup(page.text, 'lxml') # 找到包含所有影片的容器(id唯一,用find而不是find_all) movies_container = soup.find("div", {"id": "movie_wide"}) if not movies_container: print("未找到影片容器") return # 找到容器里所有包含影片链接的p标签 movie_paragraphs = movies_container.find_all('p') # 遍历每个p标签提取信息 for p in movie_paragraphs: # 找到p里的a标签 link_tag = p.find('a') if link_tag: # 获取链接和标题 link = link_tag.get('href') title = link_tag.text.strip() print(f"标题: {title}") print(f"链接: {link}") print("---") # 调用函数 scarica_pagina(URL)
代码解释:
- 用
soup.find("div", {"id": "movie_wide"})精准定位到存放所有影片的容器(因为id唯一,不用找多个)。 - 用
movies_container.find_all('p')拿到容器里所有的影片条目(每个影片都在一个<p>里)。 - 遍历每个
<p>,检查里面是否有<a>标签(避免出错),然后提取链接和标题,最后打印出来。
这样就能抓取页面上所有的影片信息啦~
内容的提问来源于stack exchange,提问作者PdF
相关产品推荐
相关产品推荐

