热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法

这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下
抓取豆瓣电影TOP100
一、分析豆瓣top页面,构建程序结构
1.首先打开网页http://movie.douban.com/top250?start,也就是top页面
然后试着点击到top100的页面,注意带top100的链接依次为

http://movie.douban.com/top250?start=0
http://movie.douban.com/top250?start=25
http://movie.douban.com/top250?start=50
http://movie.douban.com/top250?start=75

2.然后通过查看源码,发现电影名的代码如下:

肖申克的救赎
/ The Shawshank Redemption
如图,因为有一些英文名等描述,通过正则抓取有些干扰,可能还需要后续过滤。

根据以上信息,此程序主要分以下3个步骤:

二、构建url地址池

  • 抓取top100电影名称
  • 依次打印输出

依次写出代码

1.构建url地址池。代码如下:

import urllib2
import re
# ----------确定url地址池------------
pre_url = 'http://movie.douban.com/top250?start='
top_urls = []
# 因为top100,每页25部电影,故为4页,从零开始
for num in range(4):
  top_urls.append(pre_url + str(num * 25))

2.抓取top100电影名称

# ------------抓取top100电影名称----------
top_cOntent= []
top_tag = re.compile(r'(.+?)')
for url in top_urls:
  cOntent= urllib2.urlopen(url).read()
  pre_cOntent= re.findall(top_tag, content)
  # 过滤不符合条件的list,得到最后的top100的list
  for item in pre_content:
    if item.find(' ') == -1:
      top_content.append(item)

3.打印输出

top_num = 1
for item in top_content:
  print 'Top' + str(top_num) + '  ' + item
  top_num += 1

三、整理代码
我还是python新手,还没有太多的pythonic思想,也没有代码优化技巧,只能说是整理。
其次,个人习惯,在简单的代码里面我还是喜欢少用函数,尽量不隐藏代码的逻辑。
以下代码请参考,并欢迎提意见,希望得到大家的意见,谢谢!
整理后的代码如下:

# coding=utf-8
'''
本代码为自动抓取豆瓣top100电影代码
@pre_url url地址前缀,在这里为http://movie.douban.com/top250?start=
@top_urls url地址池
@top_tag 为抓取电影名正则表达式
'''

import urllib2
import re

pre_url = 'http://movie.douban.com/top250?start='
top_urls = []
top_tag = re.compile(r'(.+?)')
top_cOntent= []
top_num = 1

# ----------确定url地址池------------
# 因为top100,每页25部电影,故为4页,从零开始
for num in range(4):
  top_urls.append(pre_url + str(num * 25))


# ------------抓取top100电影名称,并打印输出----------
top_tag = re.compile(r'(.+?)')
for url in top_urls:
  cOntent= urllib2.urlopen(url).read()
  pre_cOntent= re.findall(top_tag, content)
  # 过滤并打印输出
  for item in pre_content:
    if item.find(' ') == -1:
      print 'Top' + str(top_num) + '  ' + item
      top_num += 1

抓取用户头像图片

import urllib.request
import re
import time
 
#获取输入的帖子单页html
def getHtml2(url2):
  html2=urllib.request.urlopen(url2).read().decode('utf-8')
  return html2
 
#抽取图片相关列表,并下载图片
def gettopic(html2):
  reg2=r'http://www.douban.com/group/topic/\d+'
  topiclist=re.findall(reg2,html2)
  x=0
  #限制下载的图片数
  for topicurl in topiclist:
    x+=1
  return topicurl
 
 
#下载图片到本地
def download(topic_page):
  reg3=r'http://img3.douban.com/view/group_topic/large/public/.+\.jpg'
  imglist=re.findall(reg3,topic_page)
  i=1
  download_img=None
  for imgurl in imglist:
#取图片ID为文件名
    img_numlist=re.findall(r'p\d{7}',imgurl)
    for img_num in img_numlist:
       
      download_img=urllib.request.urlretrieve(imgurl,'D:\python\code\girls\%s.jpg'%img_num)
      time.sleep(1) 
      i+=1
      print(imgurl)
  return download_img
 
#调用函数
page_end=int(input('请输入结束时的页码:'))
num_end=page_end*25
num=0
page_num=1
while num<=num_end:
  html2=getHtml2('http://www.douban.com/group/kaopulove/discussion&#63;start=%d'%num)
  topicurl=gettopic(html2)
  topic_page=getHtml2(topicurl)
  download_img=download(topic_page)
  num=page_num*25
  page_num+=1
 
else:
  print('采集完成!')

推荐阅读
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 本文详细介绍了如何将 Python 3.6.3 程序转换为 Windows 可执行文件(.exe),并解决了使用 py2exe 和 cx_Freeze 时遇到的问题。推荐使用 PyInstaller 进行打包,提供完整的安装和打包步骤。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
author-avatar
Gravitymann
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有