当前位置: 首页 > wzjs >正文

网站怎么更新网页内容同时做网站建设和代账

网站怎么更新网页内容,同时做网站建设和代账,品牌设计公司排行榜,ydg wordpress theme在当今数据驱动的时代,获取电影数据对于推荐系统、市场分析和个人项目都至关重要。本文将详细介绍如何使用Python构建一个完整的TMDB(The Movie Database)爬虫,从登录认证到数据解析和存储的全过程。(本来博主也想在CS…

在当今数据驱动的时代,获取电影数据对于推荐系统、市场分析和个人项目都至关重要。本文将详细介绍如何使用Python构建一个完整的TMDB(The Movie Database)爬虫,从登录认证到数据解析和存储的全过程。(本来博主也想在CSDN里面上白嫖结果没有一篇文章,然后......

1. 项目概述

TMDB是一个广受欢迎的电影数据库网站,包含了丰富的电影信息、演员数据和用户评分。我们的目标是构建一个爬虫,能够:

  1. 自动登录TMDB账号

  2. 抓取电影列表页数据

  3. 深入获取每部电影的详细信息

  4. 将数据保存为结构化的JSON格式

2. 技术栈

  • Requests:处理HTTP请求和会话管理

  • BeautifulSoup:HTML解析和数据提取

  • 正则表达式:辅助提取特定格式的数据

  • 类型提示:提高代码可读性和可维护性

  • 随机延时:模拟人类行为,避免被封禁

3. 核心代码解析

3.1 初始化与登录

class TMDBScraper:def __init__(self):self.base_url = "https://www.themoviedb.org"self.username = "eqwaak"  # TMDB账号self.password = "xyx000"  # TMDB密码self.session = requests.Session()# 设置请求头self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...','Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8','Referer': 'https://www.themoviedb.org/','Origin': 'https://www.themoviedb.org'}self.session.headers.update(self.headers)self.request_delay = (1, 3)# 手动登录获取Cookieself._manual_login()

登录过程是爬虫的关键部分,TMDB采用了CSRF防护机制:

def _manual_login(self):# 获取登录页面以获取CSRF令牌login_url = f"{self.base_url}/login"login_page = self.session.get(login_url)soup = BeautifulSoup(login_page.text, 'html.parser')# 查找CSRF令牌csrf_token = soup.find('input', {'name': 'authenticity_token'}).get('value')# 准备登录数据login_data = {'username': self.username,'password': self.password,'authenticity_token': csrf_token,'remember': 'on','commit': 'Login'}# 提交登录请求login_response = self.session.post(login_url, data=login_data, allow_redirects=False)if login_response.status_code == 302 and 'session_id' in login_response.cookies:print("✅ 登录成功!")self._set_language('zh-CN')else:print("❌❌ 登录失败,尝试备用方法")self._fallback_login()

3.2 数据抓取与解析

电影列表页解析:

def parse_movie_list(self, html: str) -> List[Dict]:soup = BeautifulSoup(html, 'html.parser')cards = soup.select('.card.style_1')movies = []for card in cards:title = self._parse_text('h2', card)rating = self._parse_attribute('.user_score_chart', 'data-percent', card)year = self._parse_text('.release_date', card)href = self._parse_attribute('a', 'href', card, default="")# 提取海报图片URLposter_element = card.select_one('img.poster')poster_url = Noneif poster_element:poster_url = poster_element.get('src') or poster_element.get('data-src')if poster_url:poster_url = self._complete_url(poster_url)if title and href:movies.append({'title': title,'rating': rating,'year': year,'poster_url': poster_url,'detail_url': self.base_url + href + "?language=zh-CN"})return movies

电影详情页解析:

def parse_movie_details(self, html_content: str) -> Optional[Dict]:soup = BeautifulSoup(html_content, 'html.parser')# 获取标题和年份title = self._parse_text('.title h2 a', soup)year_info = self._extract_year(soup)details = {'title': title,'rating': self._parse_attribute('.user_score_chart', 'data-percent', soup) or "0",'year': year_info,'runtime': self._parse_text('.facts .runtime', soup) or "未知时长",'genres': [genre.get_text(strip=True) for genre in soup.select('.genres a')],'overview': self._parse_text('.overview p', soup) or "暂无简介",'cast': self._extract_cast(soup),'poster_url': self._extract_image_url(soup, '.poster img'),'backdrop_url': self._extract_image_url(soup, '.backdrop img')}return details

3.3 主运行逻辑

def run(self, max_pages: int = 2, save_path: str = 'tmdb_movies.json') -> None:all_movies = []# 抓取列表页for page in range(1, max_pages + 1):movies = self.fetch_page(f"{self.base_url}/movie", page)all_movies.extend(movies)time.sleep(random.uniform(2, 5))# 抓取详情页detailed_movies = []for movie in all_movies:detail_html = self._get_html(movie['detail_url'])if detail_html:details = self.parse_movie_details(detail_html)if details:detailed_movies.append(details)time.sleep(random.uniform(3, 6))# 保存数据with open(save_path, 'w', encoding='utf-8') as f:json.dump(detailed_movies, f, ensure_ascii=False, indent=2)

4. 关键技术与优化

4.1 反爬虫策略应对

  1. 请求头设置:模拟真实浏览器访问

  2. 随机延时time.sleep(random.uniform(2, 5))避免频繁请求

  3. 会话保持:使用requests.Session()维持登录状态

  4. CSRF处理:从页面提取并提交CSRF令牌

4.2 数据提取的健壮性

def _parse_text(self, selector: str, soup: BeautifulSoup) -> Optional[str]:"""通用文本解析方法"""element = soup.select_one(selector)return element.get_text(strip=True) if element else Nonedef _parse_attribute(self, selector: str, attr: str, soup: BeautifulSoup, default=None) -> Optional[str]:"""通用属性解析方法(带默认值)"""element = soup.select_one(selector)return element[attr] if element and attr in element.attrs else default

4.3 错误处理与日志

def _get_html(self, url: str) -> Optional[str]:"""内部请求方法(带重试机制和语言参数)"""for attempt in range(3):  # 重试3次try:response = self.session.get(url, timeout=10)response.raise_for_status()# 验证返回内容是否为中文if "中文" in response.text or "电影" in response.text:return response.textelse:with open('response.html', 'w', encoding='utf-8') as f:f.write(response.text)return Noneexcept requests.RequestException as e:if attempt < 2:time.sleep(2 ** attempt)continueprint(f"请求失败({url}): {str(e)}")return None

5. 项目扩展与改进方向

  1. 数据库存储:将数据存入MongoDB或MySQL而非JSON文件

  2. 异步请求:使用aiohttp提高抓取效率

  3. 代理池集成:应对IP封禁问题

  4. 数据更新机制:增量抓取而非全量

  5. API替代方案:考虑使用TMDB官方API(如有权限)

6. 结语

通过这个项目,我们实现了一个完整的TMDB爬虫,涵盖了从登录认证到数据存储的全流程。关键点包括:

  1. 正确处理CSRF保护的登录流程

  2. 健壮的数据提取方法

  3. 反爬虫策略的实现

  4. 完善的错误处理和日志记录

完整代码已包含所有实现细节,读者可以根据需要调整参数或扩展功能。记住在实际使用时,要遵守TMDB的使用条款,合理控制请求频率。

希望这篇文章能帮助你理解如何构建一个生产级的网页爬虫!如果你有任何问题或改进建议,欢迎留言讨论。


文章转载自:

http://iXfW8ysH.jthjr.cn
http://DqR03yJ9.jthjr.cn
http://UmqHI01d.jthjr.cn
http://kvuLBaxu.jthjr.cn
http://NZ4ZUwZM.jthjr.cn
http://3yJCbzN4.jthjr.cn
http://00d522lx.jthjr.cn
http://1H2QzQOX.jthjr.cn
http://Zh4a9s0A.jthjr.cn
http://bGu3MIzj.jthjr.cn
http://VlxqICxJ.jthjr.cn
http://Uy7xDShR.jthjr.cn
http://bHh1M9nY.jthjr.cn
http://KghePFfD.jthjr.cn
http://KBCdwDAV.jthjr.cn
http://WgsdbNvW.jthjr.cn
http://bUJDSfeH.jthjr.cn
http://VmbsKq06.jthjr.cn
http://XEAUDHD0.jthjr.cn
http://F6UXXcOv.jthjr.cn
http://18TgCDwN.jthjr.cn
http://5SMTA785.jthjr.cn
http://vwX5uNgC.jthjr.cn
http://JkqW9hJ3.jthjr.cn
http://Z0x6OIbr.jthjr.cn
http://M8rtuz0O.jthjr.cn
http://MqW51GmA.jthjr.cn
http://NgkONKYj.jthjr.cn
http://V3rdzNSG.jthjr.cn
http://tHJAJkCC.jthjr.cn
http://www.dtcms.com/wzjs/778834.html

相关文章:

  • 租用网站如何制作网页网站设计需求
  • 做车身拉花的网站三亚用什么软件约
  • 厦门网站建设哪家厦门建设银行.me做社区网站
  • 什么做自己的网站深圳建筑行业公司
  • 邯郸企业网站团队建设网站的公司广州
  • 做外贸的网站看啥书用ps个人网站怎么做
  • 2017网站设计趋势做网站具体收费
  • 网站建设介绍推广用语扬州网站建设费用
  • 个人交互网站一个设计网站多少钱
  • 徐州制作网站软件线下广告投放渠道都有哪些
  • 南京做网站的公司排名大数据营销是什么
  • 短视频营销经典案例seo教学培训
  • 外贸网站宗旨石家庄网站建设解决方案
  • 网站备案到期了怎么办益阳市建设网站
  • 网站建设的商品编码太原网站建设山西悉云科技
  • 做视频网站软件有哪些大连市建设工程集团有限公司
  • 网站一直没有收录太原建站模板
  • 网站更换服务器惠州专业网站设计公司
  • 国际贸易电子商务网站建设流程wordpress 加速访问
  • 扬州网站建设哪家公司好抚宁建设局网站
  • 外贸公司网站怎么做重庆微网站开发公司
  • 小程序网站建设制作上海企业网站推广方法
  • 泸州住房城乡建设局官方网站找网站开发项目
  • 手机设计软件室内装修微博搜索引擎优化
  • 网站内容模板深圳外贸人才网
  • 视频涉台互联网网站怎么做泉州教育网站
  • 幸运28网站建设个人网站建立内容
  • 江苏建设人才考试网官方网站用wordpress教程视频
  • 昆明网站建设网站巩义做网站
  • 做网站的风险设计网站建设公司