本帖最后由 Mike_python小 于 2023-7-20 13:17 编辑
你的代码看起来已经很不错了!不过,我注意到其中有一处可能会导致错误的地方。在使用 soup.select('.lazyloaded') 选择器时,你可能想要提取具有 "lazyloaded" 类的元素,但在列表解析中,你却使用了 lazyload.text.strip() 来提取游戏名称。这样会导致 AttributeError: 'str' object has no attribute 'text' 错误。
为了修复这个问题,并进行其他一些改进,你可以尝试以下修改:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
def get_page_content(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
}
response = session.get(url, headers=headers)
content = response.text
return content
def parse_content(content):
soup = BeautifulSoup(content, 'html.parser')
lazyloadeds = soup.select('.lazyloaded')
games = [lazyloaded.parent.find_next('h2').text.strip() for lazyloaded in lazyloadeds]
return games
def get_next_page_url(content):
soup = BeautifulSoup(content, 'html.parser')
next_button = soup.find('a', class_='next page-numbers')
if next_button:
next_page_url = next_button['href']
return next_page_url
else:
return None
def crawl_website():
base_url = "https://www.gamer520.com/switchyouxi"
url = base_url
while True:
content = get_page_content(url)
games = parse_content(content)
for game in games:
print(game)
next_page_url = get_next_page_url(content)
if next_page_url is None:
break
url = next_page_url
crawl_website()
在修改后的代码中,我对 parse_conten 函数进行了更新,使用 lazyloaded 元素的父节点找到游戏名称所在的 <h2> 元素,并提取其文本内容。这样可以确保正确提取游戏名称。
希望这次的修改对你有帮助!如果你还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!
|