python学习-获取时光网电影TOP100电影信息

本文介绍了使用Python通过requests和lxml库获取时光网电影TOP100信息的过程,涉及HTML解析、JSON数据提取等技能。在实践中遇到问题,如电影评分需从JSON URL获取,作者表示将继续深入学习Python编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、知识点

1、通过requests.get获取页面html代码
2、通过lxml的etree模块配合xpath方法获取需要的内容
3、json文件的加载和提取相关内容
4、其它:for语句、字符串截取、元祖的使用等

二、代码

在经过一段时间学习python的基本知识,同时也照葫芦画瓢了一段时间后,编写了下面的python程序,实现对时光网电影TOP100的电影信息进行提取。

#-*- coding=utf-8 -*-
import requests
import time
import json
from lxml import etree

#获取页面的html并返回etree
def get_html_tree(url,headers):
    resp = requests.get(url,headers=headers).text
    resp_tree = etree.HTML(resp)
    return resp_tree

#获取初始页的电影链接
def get_movie_link(resp_tree):
    links = resp_tree.xpath('//div[@class="mov_con"]//h2/a/@href')
    return links

#对每个电影页面进行解析
def parse_page(movie_tree,
以下是一个基于Python 3的多协程以及队列爬取时光网电视剧top100的示例代码: ```python import requests from bs4 import BeautifulSoup import asyncio import aiohttp import time from queue import Queue async def fetch(session, url): async with session.get(url) as response: return await response.text() async def parse(html): soup = BeautifulSoup(html, 'html.parser') for item in soup.select('div[class="mov_con"] ul li'): rank = item.find('span', class_='top_num').text name = item.find('span', class_='mov_title').text score = item.find('span', class_='total_score').text print(rank, name, score) async def worker(session, queue): while not queue.empty(): url = queue.get() html = await fetch(session, url) await parse(html) async def main(): urls = [f'http://www.mtime.com/top/tv/top100/index-{i+1}.html' for i in range(10)] queue = Queue() for url in urls: queue.put(url) async with aiohttp.ClientSession() as session: tasks = [asyncio.create_task(worker(session, queue)) for _ in range(10)] await asyncio.gather(*tasks) if __name__ == '__main__': start_time = time.time() asyncio.run(main()) end_time = time.time() print(f'Time used: {end_time - start_time} seconds') ``` 这段代码使用了Python的asyncio库和aiohttp库来实现多协程异步爬取网页,使用了Python的queue模块来实现任务队列。首先,我们定义了`fetch`函数来异步获取网页内容,其返回值为响应的文本内容。然后,我们定义了`parse`函数来解析网页内容,提取出电视剧的排名、名称和评分,并输出到控制台。接着,我们定义了`worker`函数来作为协程的工作函数,从任务队列中取出一个URL并异步地解析该URL对应的网页。最后,我们定义了`main`函数来创建任务队列,创建异步协程,以及启动异步任务。在`main`函数中,我们先创建了10个URL,然后将这些URL放入任务队列中。接着,我们使用`async with`语句创建一个异步会话,并使用`create_task`函数创建10个异步协程,每个协程都调用`worker`函数,从任务队列中取出一个URL,并异步地解析对应的网页。最后,我们使用`asyncio.gather`函数等待所有的异步协程执行完毕。在程序执行结束后,我们还输出了程序的执行时间。 需要注意的是,由于时光网在一定时间内会对IP进行限制,如果爬虫速度过快可能会被封禁IP,因此我们在程序中设置了一个1秒钟的延时,以避免被封禁。如果您需要更高的爬取速度,请自行调整代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值