python爬虫(一)——爬取咚漫漫画信息(非下载漫画)

python爬虫——咚漫漫画信息(非下载漫画)

目的:回顾爬虫,联系redis存储
使用python库:requests、bs4、redis、lxml
redis存储结构:使用hash格式存储,其name使用漫画的名称,里面存储于漫画相关的键值对。
使用的编辑器为jupyter notebook,操作系统linux,当然对于python代码而言,操作系统影响不大,移植没难度。

一、导入函数
import os,sys
import requests
import bs4
import redis
from lxml import etree
# import urllib.request # 如果不下载图片,不用导入
二、连接redis
# 连接redis
pool = redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 验证连接
print(r.ping())
三、爬虫设计
def deal_url(url):
    '''解析网页'''
    response = requests.get(url)
    text = response.text
    return text

def parse_index_page(text):
    '''从首页获取全部漫画地址'''
    html = etree.HTML(text)
    anime_urls = html.xpath("//ul[@class='daily_card daily_limit_img_container']//a/@href")
    for i,url in enumerate(anime_urls):
        url = 'http://'+url.strip('//')
        print(url)
        anime_urls[i] = url
    return anime_urls

def parse_detail_page(text):
    '''
    获取每个漫画的详细信息
	anime_name——漫画名称
	anime_style——漫画类型
	anime_score——漫画评分
	anime_author——漫画作者
	'''
    html = etree.HTML(text)
    anime_name = ''.join(html.xpath("//div[@class='info']/h1/text()")).strip()
    anime_style = ''.join(html.xpath("//div[@class='info']/h2/text()")).strip()
    anime_score = ''.join(html.xpath("//em[@class='cnt']/text()")).strip()
    anime_summary = ''.join(html.xpath("//p[@class='summary']/text()")).strip()
    anime_author = html.xpath("//div[@class='info']//span[@class='author']/text()")
    if len(anime_author)==0:
        anime_author='未知作家'
    else:
        anime_author = '/'.join(anime_author).strip()
           
    print(anime_name)
    print(anime_author)
    print('*'*50)
    r.hset(anime_name,'anime_name',anime_name)
    r.hset(anime_name,'anime_style',anime_style)
    r.hset(anime_name,'anime_score',anime_score)
    r.hset(anime_name,'anime_author',anime_author)
    

def spider():
    url = 'https://www.dongmanmanhua.cn/dailySchedule?weekday=MONDAY'
    text = deal_url(url)
    anime_urls = parse_index_page(text)
    for i,anime_url in enumerate(anime_urls):
        anime_text=deal_url(anime_url)
        parse_detail_page(anime_text)
        

if __name__ == '__main__':
    spider()
输出结果(部分):

1.输出结果
爬取结果
上图中上面输出的url为每个漫画的url地址,下面是每个漫画的名称和作者。

  1. redis中保存的数据:
    redis存储
  2. 每个hash中的全部键值对:
    hash键值对

爬虫源代码下载参考:

### 使用Python编写爬虫抓取优酷视频 #### 抓取目标与工具准备 为了实现对优酷视频的数据获取,通常会涉及到网页请求、解析HTML文档以及处理API接口返回的内容。对于这类任务,`requests`库用于发起HTTP/HTTPS网络请求;而`BeautifulSoup`或`lxml`则适合于解析HTML/XML结构化数据。如果遇到JavaScript渲染的页面,则可能需要用到Selenium这样的浏览器自动化框架[^1]。 #### 处理登录验证机制 部分网站可能会设置较为严格的反扒措施,比如验证码识别或是基于Cookies的身份认证流程。针对这种情况,在开发初期就要考虑好应对策略,例如模拟真实用户的浏览行为模式,定期更换User-Agent字符串,甚至利用第三方服务绕过图形验证码挑战等问题[^2]。 #### 数据提取逻辑设计 当面对像优酷这样大型综合性媒体平台时,直接从公开可访问的部分入手往往是最简单有效的方式之。具体来说就是先定位到含有目标资源列表页URL模板,再依据定规则遍历每页直至结束条件满足为止。与此同时还要注意观察详情页链接构造规律以便后续深入挖掘更多有价值的信息项[^3]。 ```python import requests from bs4 import BeautifulSoup def fetch_video_list(page_num=1): url = f"https://www.youku.com/v_olist/c_97_p_{page_num}.html" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") video_items = [] for item in soup.select('.v-link'): title = item['title'] href = item['href'] video_items.append({ 'title': title, 'url': href }) return video_items if __name__ == "__main__": videos = fetch_video_list() for v in videos[:5]: print(f"{v['title']}: {v['url']}") ``` 此段代码仅作为基础示范用途,请勿滥用本技术手段法采集他人受版权保护的作品!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值