鱼C论坛

 找回密码
 立即注册
查看: 2895|回复: 4

游戏网站的缩略图l链接爬虫,执行了什么结果都没有,也没有报错,问问大佬们咋回事

[复制链接]
发表于 2023-7-20 13:07:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Hehe1221 于 2023-7-20 15:00 编辑

本人小白,懂得很少,求大佬指点一下(≧ - ≦)
代码如下(加了注释):
  1. import requests
  2. from bs4 import BeautifulSoup

  3. session = requests.Session()

  4. def get_page_content(url):
  5.     headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
  7.                       '(KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
  8.     }
  9.     response = session.get(url, headers=headers)
  10.     content = response.text
  11.     return content

  12. def parse_content(content):
  13.     # 创建BeautifulSoup对象,用于解析HTML内容
  14.     soup = BeautifulSoup(content, 'html.parser')

  15.     # 使用CSS选择器选择所有class为'lazyloaded'的元素
  16.     lazyloadeds = soup.select('.lazyloaded')
  17.    
  18.     # 提取游戏名称,并去除首尾的空白字符
  19.     games = [lazyload.text.strip() for lazyloaded in lazyloadeds]
  20.     return games

  21. def get_next_page_url(content):
  22.     # 创建BeautifulSoup对象,用于解析HTML内容
  23.     soup = BeautifulSoup(content, 'html.parser')

  24.     # 查找下一页按钮的<a>标签
  25.     next_button = soup.find('a', class_='next page-numbers')
  26.    
  27.     if next_button:
  28.         # 如果存在下一页按钮,则提取其href属性来获取下一页的URL
  29.         next_page_url = next_button['href']
  30.         return next_page_url
  31.     else:
  32.         # 如果不存在下一页按钮,则返回None表示已到达最后一页
  33.         return None

  34. def crawl_website():
  35.     base_url = "https://www.gamer520.com/switchyouxi"
  36.     url = base_url
  37.    
  38.     while True:
  39.         # 获取当前页的内容
  40.         content = get_page_content(url)
  41.         
  42.         # 解析当前页的内容,提取游戏名称
  43.         games = parse_content(content)
  44.         
  45.         # 打印游戏名称
  46.         for game in games:
  47.             print(game)

  48.         # 获取下一页的URL
  49.         next_page_url = get_next_page_url(content)
  50.         
  51.         if next_page_url is None:
  52.             # 如果下一页URL为None,表示已到达最后一页,跳出循环
  53.             break

  54.         # 更新URL为下一页的URL,继续循环爬取下一页
  55.         url = next_page_url

  56. crawl_website()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 13:07:15 | 显示全部楼层
本帖最后由 Mike_python小 于 2023-7-20 13:17 编辑

你的代码看起来已经很不错了!不过,我注意到其中有一处可能会导致错误的地方。在使用 soup.select('.lazyloaded') 选择器时,你可能想要提取具有 "lazyloaded" 类的元素,但在列表解析中,你却使用了 lazyload.text.strip() 来提取游戏名称。这样会导致 AttributeError: 'str' object has no attribute 'text' 错误。

为了修复这个问题,并进行其他一些改进,你可以尝试以下修改:

  1. import requests
  2. from bs4 import BeautifulSoup

  3. session = requests.Session()

  4. def get_page_content(url):
  5.     headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
  7.                       '(KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
  8.     }
  9.     response = session.get(url, headers=headers)
  10.     content = response.text
  11.     return content

  12. def parse_content(content):
  13.     soup = BeautifulSoup(content, 'html.parser')
  14.     lazyloadeds = soup.select('.lazyloaded')
  15.     games = [lazyloaded.parent.find_next('h2').text.strip() for lazyloaded in lazyloadeds]
  16.     return games

  17. def get_next_page_url(content):
  18.     soup = BeautifulSoup(content, 'html.parser')
  19.     next_button = soup.find('a', class_='next page-numbers')
  20.     if next_button:
  21.         next_page_url = next_button['href']
  22.         return next_page_url
  23.     else:
  24.         return None

  25. def crawl_website():
  26.     base_url = "https://www.gamer520.com/switchyouxi"
  27.     url = base_url

  28.     while True:
  29.         content = get_page_content(url)
  30.         games = parse_content(content)

  31.         for game in games:
  32.             print(game)

  33.         next_page_url = get_next_page_url(content)

  34.         if next_page_url is None:
  35.             break

  36.         url = next_page_url

  37. crawl_website()
复制代码


在修改后的代码中,我对 parse_conten 函数进行了更新,使用 lazyloaded 元素的父节点找到游戏名称所在的 <h2> 元素,并提取其文本内容。这样可以确保正确提取游戏名称。

希望这次的修改对你有帮助!如果你还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 13:07:23 | 显示全部楼层
你好!看起来你想编写一个用于爬取游戏网站缩略图的爬虫。根据你提供的代码,我发现了几个可能导致问题的地方:

1. 你导入了BeautifulSoup,但是没有导入bs4模块。你需要在开头添加from bs4 import BeautifulSoup来正确导入该模块。

2. 在get_page_content函数中,你将请求头(headers)放在了多行字符串内部,这可能会导致请求头格式错误。请修改为以下方式,将请求头放在单独的行上:

  
  1.    headers = {
  2.        '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'
  3.    }
  4.    
复制代码

3. 在parse_content函数中,你使用了lazyload.text.strip()来提取游戏名称。然而,在前面的代码中,你使用了lazyloadeds作为遍历的变量名,这可能是一个笔误。请将其修改为lazyloaded,代码如下:

  
  1.    games = [lazyloaded.text.strip() for lazyloaded in lazyloadeds]
  2.    
复制代码

4. 在crawl_website函数中,你定义了base_url"https://www.gamer520.com/switchyouxi",但是在每次循环时,你更新的是next_page_url而不是url。请将以下代码:

  
  1.    url = next_page_url
  2.    
复制代码

   修改为:

  
  1.    url = next_page_url
  2.    
复制代码

这些是我在你的代码中发现的一些问题。请尝试修改后重新运行你的爬虫,看看是否能够正常获取游戏名称。如果还有其他问题,请随时向我提问!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 13:07:24 | 显示全部楼层
首先,非常感谢你分享了这段代码。我发现问题可能出现在  parse_content  函数中,你是在试图提取 class 为 'lazyloaded' 的元素的文本。然而,这个元素可能是图片或者其他无文本的元素,所以你得到的结果是空的。你可能需要重新检查这个选择器和你想提取的数据的实际HTML结构。

代码中的这一部分:
  1. # 使用CSS选择器选择所有class为'lazyloaded'的元素
  2. lazyloadeds = soup.select('.lazyloaded')
复制代码

在这里,你尝试提取 class 名为 'lazyloaded' 的所有元素。但是, lazyloaded  这个类名,通常是用于懒加载的图片,而不是包含文本的元素。因此,你可能需要重新检查你正在尝试提取的元素的 HTML 结构,以确认你使用的 CSS 选择器是否正确。

然后,你可能还需要检查这个网站是否有反爬虫的机制。如果有,你的请求可能被拒绝了,但由于你没有检查 HTTP 响应的状态码,你可能没有注意到这一点。

最后,为了帮助你解决问题,我需要你提供更多的信息。例如,你可以打印出你得到的  content  或  games  看看是否有你期待的内容。你还可以提供一下你希望从网页中提取的具体信息的样子,这样我们才能给出更准确的帮助。

希望这个解答能对你有所帮助!如果你有更多的问题,随时向我们提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 13:33:17 | 显示全部楼层
占楼根据你提供的代码,目前看不出明显的错误。可能是以下几个原因导致爬虫没有正常执行:


网站URL不正确:请确保base_url所指向的网站是有效的,并且确保网站存在游戏缩略图。


网站反爬虫机制:有些网站会使用反爬虫机制来阻止爬虫程序的访问。你可以尝试在请求头中加入更多的参数,例如cookies等信息,以模拟浏览器的行为。


解析器问题:在使用BeautifulSoup解析HTML内容时,如果网页的结构发生变化,也可能导致解析失败。你可以检查一下网页是否有更新或者尝试换用其他解析器,例如lxml


网络请求问题:可能是网络请求出现问题,导致无法正常获取页面内容。你可以尝试在get_page_content函数中打印出response对象的状态码,查看是否返回了正确的响应。


如果以上方法都没有解决问题,建议逐步调试代码,添加一些打印语句来查看程序执行过程中的变量和结果,以便找出问题所在。


为什么不给我设置一个最佳答案呢?点它 ->

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表