鱼C论坛

 找回密码
 立即注册
查看: 1693|回复: 1

[技术交流] Python 爬取论坛徽章

[复制链接]
发表于 2020-3-27 10:48:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 qiuyouzhi 于 2020-3-27 10:50 编辑

Python 爬取论坛徽章


昨天看了一下,其他的表情都很好爬,那个阿狸的,

就是ali1,ali2,写个循环遍历下载下来就行,这里不多赘述。

用到的模块:

pypinyin,因为徽章都是中文的,直接用徽章拼音命名。
requests: 不多说,获取网页神器。
bs4:分析网页,提取数据。

直接说思路:

先导入该用的模块,并写出下载网页的函数:

  1. from pypinyin import lazy_pinyin as l  # 用lazy_pinyin,去掉声调
  2. from requests import get
  3. from bs4 import BeautifulSoup as BS

  4. def open_url(url):
  5.     res = get(url)  # 我们亲爱的鱼C不需要User-Agent
  6.     return res
复制代码


分析网页:

(电脑渣,这里不放图片

翻翻源代码,可以发现:

  1. <p>活跃小鱼</p>
  2. <p class="mtn">
  3. 自主申请
  4. </p>
  5. </div>
  6. </div>
  7. <div id="medal_34" class="mg_img" onmouseover="showMenu({'ctrlid':this.id, 'menuid':'medal_34_menu', 'pos':'12!'});"><img src="static/image/common/huoyuexiaoyu.gif" alt="活跃小鱼" style="margin-top: 20px;width:auto; height: auto;" /></div>
  8. <p class="xw1">活跃小鱼</p>
  9. <p>
  10. 已拥有
  11. </p>
  12. </li>
  13. <li>
复制代码


我去,全在<p>标签里面啊!

直接写代码:

  1. def get_pinyin(name): # 获取拼音并保存
  2.     pinyin = [l(each) for each in name]
  3.     return pinyin

  4. def zhizun():
  5.     url = 'https://fishc.com.cn/static/image/common/vip.gif'
  6.     res = open_url(url)
  7.     with open("zhizunvip.gif", "wb") as f:
  8.         f.write(res.content)

  9. def find_name(res): # 找出来勋章的名字
  10.     name = []
  11.     soup = BS(res.text, "html.parser")
  12.     target = soup.find_all('p', class_='xw1')
  13.     for each in target:
  14.         name.append(each.text)
  15.     return name
复制代码


那个zhizun可能大家看不明白,是因为

勋章的名字叫做至尊VIP,而它的URL

则是vip(没有至尊),所以只能单独给它搞一个

(用切片也行)。

现在就是最后一步,保存图片!

  1. def get_Img():
  2.     res = open_url("https://fishc.com.cn/home.php?mod=medal")
  3.     name = find_name(res)
  4.     pinyin = get_pinyin(name)
  5.     for each in pinyin:
  6.         each = "".join(each).lower()    # each 不是字符串,要用 "".join(each)
  7.         url = 'https://fishc.com.cn/static/image/common/%s.gif' % each
  8.         print(url)
  9.         res = open_url(url)
  10.         with open(f'{each}.gif', 'wb') as f:
  11.             f.write(res.content)
  12.     zhizun()


  13. if __name__ == "__main__":
  14.     get_Img()
  15.     print("DONE!")
复制代码


大功告成!

致谢

感谢zltzlt,没有他,我就会一直卡在get_Img()函数里。

(有点尴尬)

完整代码:

  1. from pypinyin import lazy_pinyin as l
  2. from requests import get
  3. from bs4 import BeautifulSoup as BS


  4. def open_url(url):
  5.     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
  6.     res = get(url, headers = headers)
  7.     return res


  8. def get_pinyin(name): # 获取拼音并保存
  9.     pinyin = [l(each) for each in name]
  10.     return pinyin

  11. def zhizun():
  12.     url = 'https://fishc.com.cn/static/image/common/vip.gif'
  13.     res = open_url(url)
  14.     with open("zhizunvip.gif", "wb") as f:
  15.         f.write(res.content)

  16. def find_name(res): # 找出来勋章的名字
  17.     name = []
  18.     soup = BS(res.text, "html.parser")
  19.     target = soup.find_all('p', class_='xw1')
  20.     for each in target:
  21.         name.append(each.text)
  22.     return name


  23. def get_Img():
  24.     res = open_url("https://fishc.com.cn/home.php?mod=medal")
  25.     name = find_name(res)
  26.     pinyin = get_pinyin(name)
  27.     for each in pinyin:
  28.         each = "".join(each).lower()    # each 不是字符串,要用 "".join(each)
  29.         url = 'https://fishc.com.cn/static/image/common/%s.gif' % each
  30.         print(url)
  31.         res = open_url(url)
  32.         with open(f'{each}.gif', 'wb') as f:
  33.             f.write(res.content)
  34.     zhizun()


  35. if __name__ == "__main__":
  36.     get_Img()
  37.     print("DONE!")
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
zltzlt + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-27 10:53:24 | 显示全部楼层
有些拿不到的,只能看着过过瘾了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 03:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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