2022 年,把 Python 学得跟 Java 一样熟练——06 获取 \u817e\u8baf\u0020 Cosmic

news/2024/12/19 0:08:28/

背景

昨天看了一篇获取 House Price 的文章后,运行了案例代码,能看懂,但对 html 解析的用法还不熟悉。

今天继续练习 Python 编码,目标是腾讯 Cosmic ,先完成基本信息的获取。为什么选这个呢,主要是昨天想对着某文章练习 Python Code of Spider 时,发现它是一个付费专栏,于是自己来写写。

页面元素分析

开发者模式,定位到一个节点,根据 class 信息查询 Cosmic 节点,目标是具有ret-search-item clearfixli 元素。

动漫的各项信息定位:

  1. 地址:第一个 a 标签下的 img 标签的 data-original 属性。
  2. 名称:第一个 a 标签的 titile 属性。
  3. 作者:具有 ret-works-author 类属性的 p 标签的文本。
  4. 描述:具有 ret-works-decs 类属性的 p` 标签的文本。
  5. 详情地址:具有 ret-works-view 类属性的 a 标签的 href 属性。

编码实现

取全部页面,考虑用多线程协作。

from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import RequestException
import threading"--动漫网页方法--"
def spiderPage(url, page):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}html1 = requests.request("GET", url, headers=headers, timeout=10)html1.encoding = 'utf-8'  # 加编码html = html1.text# print('scrawl result')# print(html)return htmlexcept RequestException:  # 异常捕获print('第{0}读取网页失败'.format(page))return None"--解析列表页面的动漫信息--"
def parsePage(url, page):# 取页面html = spiderPage(url, page)html = str(html)if html is not None:# soup = BeautifulSoup(html, 'lxml')soup = BeautifulSoup(html, 'html.parser')"--先确定动漫信息,即li标签列表,li class = ret-search-item clearfix --"cosmics = soup.find_all("li",class_="ret-search-item clearfix")for j in range(len(cosmics)):  # 遍历每一个动漫cosmic = cosmics[j]"动漫海报:mod-cover-list-thumb mod-cover-effect ui-db"poster = cosmic.findNext("a")posterImgTag = poster.findNext("img")posterImgUrl = posterImgTag.get("data-original")print("posterImgUrl ",posterImgUrl)"动漫详情 URL"cosmicTag= cosmic.findNext("a",class_="ret-works-view")cosmicUrl = "https://ac.qq.com/"+ cosmicTag.get("href")"动漫名称:ret-works-title "print("name is", poster.get("title"))"动漫作者:ret-works-author"author = cosmic.findNext("p",class_="ret-works-author")print("author is ", author.text)"动漫描述:ret-works-decs"desc = cosmic.findNext("p",class_="ret-works-decs")print("desc is ",desc.text)print()# 启动两个线程获取页面数据
for i in range(1,100,2):  # 遍历网页1-101url1 = "https://ac.qq.com/Comic/index/page/" + str(i)url2 = "https://ac.qq.com/Comic/index/page/" + str(i + 1)thread1 = threading.Thread(target=parsePage, args=(url1, i)) thread2 = threading.Thread(target=parsePage, args=(url2, i + 1))thread1.start()thread2.start()

运行结果

在这里插入图片描述

编码启示录

首先,有个大疑惑就是解析文本的时候, soup = BeautifulSoup(html, 'html.parser')soup = BeautifulSoup(html, 'lxml') 有什么区别呢?

最初参考的代码,用的是 lxml ,selectclass 解析不到东西,再改成 html.parserfind 方法可以正常解析了。

答案是,解析器不同:

  • html.parser,内置,不需要额外的依赖项。
  • html5lib,最宽大,如果HTML损坏,最好使用它。
  • lxml,最快,依赖外部 C 。

其次,Python 解析页面还是挺好定位的。

今天先完成基础信息的获取,下一步的完善目标是生成 DataFrame 数据,写入 Excel 表格,同时获取全部的动漫图片。


http://www.ppmy.cn/news/589811.html

相关文章

负载均衡 Load Balancing

负载均衡 Load Balancing 数据链路层负载均衡网络层负载均衡应用层负载均衡均衡策略与实现轮询与随机随机权重与加权轮询一致性 hash最少活跃数(最少连接数) 对于电商平台而言,随着业务的不断发展壮大,网站访问量和数据量也随之急…

HTML5通过api实现拖拽讲解和实例分析

在现代Web开发中,实现拖拽功能是一项常见而强大的需求。HTML5引入了拖放API(Drag and Drop API),为我们提供了一种简单而高效的方式来实现拖拽操作。其中,e.dataTransfer是该API中的一个重要属性,用于在拖拽…

rom lg g2 f320d android 4.4.2,LG G2被曝升级到安卓4.4.2出现多个问题

【环球科技综合报道】据androidorigin网站6月8日报道,LG G2收到安卓4.4.2升级推送已经有段时日。不过这项升级并没有使G2变得更加易用,反而出人意料地为其带来了大量bug和各种问题。今天小编就结合一些用户的反馈,为大家带来一些临时解决办法…

nexus+4+android+5.0,谷歌为LG Nexus 4推出Android 5.0系统官方镜像文件

来源:dospy智能手机网 作者:风后之翼 发表于:2014-11-15 13:36:07 我们已经报道过谷歌在本周开始推送正式版的Android 5.0 Lollipop系统,首先得到升级的是谷歌自家的“亲儿子”Nexus系列手机和平板电脑以及GPE谷歌版设备。根据国外媒体的消息&#xff0c…

BOOTSTRAP自我介绍网站作业

HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"&g…

【redis6.2 官方镜像Dockerfile解读】

这里写自定义目录标题 redis6.2 官方镜像Dockerfile解读 redis6.2 官方镜像Dockerfile解读 Dockerfile标注如下&#xff1a; FROM debian:bullseye-slim# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencie…

项目二网站完善

<div class"container-fluid"><div class"container"><h2 class"common-title text-center">成功案例</h2><div class"row"><div class"col-lg-8 col-lg-offset-2 common-detail text-center&q…

git 官方文档学习笔记

根据git官方网站下载的文档progit.pdf 学习的笔记 git完整笔记 git config --list 检查git配置 第一步安装git时&#xff0c;先配置用户名和邮箱 git config --global user.name "example" git config --global user.email johndoeexample.com 配置默认编辑器&am…