[Python]从豆瓣电影批量获取看过这部电影的用户列表

前言

由于之后要做一个实验,需要用到大量豆瓣用户的电影数据,因此想到了从豆瓣电影的“看过这部电影 的豆瓣成员”页面上来获取较为活跃的豆瓣电影用户。

链接分析

这是看过"模仿游戏"的豆瓣成员的网页链接:http://movie.douban.com/subject/10463953/collections

一页上显示了20名看过这部电影的豆瓣用户。当点击下一页时,当前连接变为:http://movie.douban.com/subject/10463953/collections?start=20

由此可知,当请求下一页内容时,实际上就是将"start"后的索引增加20。

因此,我们可以设定base_url=‘http://movie.douban.com/subject/10463953/collections?start=‘,i=range(0,200,20),在循环中url=base_url+str(i)

之所以要把i的最大值设为180,是因为后来经过测试,豆瓣只给出看过一部电影的最近200个用户。

读取网页

在访问时我设置了一个HTTP代理,并且为了防止访问频率过快而被豆瓣封ip,每读取一个网页后都会调用time.sleep(5)等待5秒。 在程序运行的时候干别的事情好了。

网页解析

本次使用BeautifulSoup库解析html。
每一个用户信息在html中是这样的:

  <table width="100%" class="">
  <tr>
      <td width="80" valign="top">
          <a href="http://movie.douban.com/people/46770381/">
              <img class="" src="http://img4.douban.com/icon/u46770381-16.jpg" alt="七月" />
          </a>
      </td>
      <td valign="top">
          <div class="pl2">
              <a href="http://movie.douban.com/people/46770381/" class="">七月
                  <span style="font-size:12px;">(银川)</span>
              </a>
          </div>
          <p class="pl">2015-08-23
                  &nbsp;<span class="allstar40" title="推荐"></span>
          </p>
      </td>
  </tr>
  </table>

首先用读取到的html初始化soup=BeautifulSoup(html)。本次需要的信息仅仅是用户id和用户的电影主页,因此真正有用的信息在这段代码中:

  <td width="80" valign="top">
      <a href="http://movie.douban.com/people/46770381/">
          <img class="" src="http://img4.douban.com/icon/u46770381-16.jpg" alt="七月" />
      </a>
  </td>

因此在Python代码中通过td_tags=soup.findAll(‘td‘,width=‘80‘,valign=‘top‘)找到所有<td width="80" valign="top">的块。

td=td_tags[0],a=td.a就可以得到

  <a href="http://movie.douban.com/people/46770381/">
      <img class="" src="http://img4.douban.com/icon/u46770381-16.jpg" alt="七月" />
  </a>

通过link=a.get(‘href‘)可以得到href属性,也就用户的电影主页链接。然后通过字符串查找也就可以得到用户ID了。

完整代码

 1 #coding=utf-8
 2 ##从豆瓣网页中得到用户id
 3
 4 ##网页地址类型:http://movie.douban.com/subject/26289144/collections?start=0
 5 ##              http://movie.douban.com/subject/26289144/collections?start=20
 6
 7 from BeautifulSoup import BeautifulSoup
 8 import codecs
 9 import time
10 import urllib2
11
12 baseUrl=‘http://movie.douban.com/subject/25895276/collections?start=‘
13
14 proxyInfo=‘127.0.0.1:8087‘
15 proxySupport=urllib2.ProxyHandler({‘http‘:proxyInfo})
16 opener=urllib2.build_opener(proxySupport)
17 urllib2.install_opener(opener)
18
19
20 #将用户信息(id,主页链接)保存至文件
21 def saveUserInfo(idList,linkList):
22     if len(idList)!=len(linkList):
23         print ‘Error: len(idList)!=len(linkList) !‘
24         return
25     writeFile=codecs.open(‘UserIdList3.txt‘,‘a‘,‘utf-8‘)
26     size=len(idList)
27     for i in range(size):
28         writeFile.write(idList[i]+‘\t‘+linkList[i]+‘\n‘)
29     writeFile.close()
30
31 #从给定html文本中解析用户id和连接
32 def parseHtmlUserId(html):
33     idList=[]   #返回的id列表
34     linkList=[] #返回的link列表
35
36     soup=BeautifulSoup(html)
37     ##<td width="80" valign="top">
38     ##<a href="http://movie.douban.com/people/liaaaar/">
39     ##<img class="" src="/u3893139-33.jpg" alt="Liar." />
40     ##</a>
41     ##</td>
42     td_tags=soup.findAll(‘td‘,width=‘80‘,valign=‘top‘)
43     i=0
44     for td in td_tags:
45         #前20名用户是看过这部电影的,
46         #而后面的只是想看这部电影的用户,因此舍弃
47         if i==20:
48             break
49         a=td.a
50         link=a.get(‘href‘)
51         i_start=link.find(‘people/‘)
52         id=link[i_start+7:-1]
53         idList.append(id)
54         linkList.append(link)
55         i+=1
56     return (idList,linkList)
57
58 #返回指定编号的网页内容
59 def getHtml(num):
60     url=baseUrl+str(num)
61     page=urllib2.urlopen(url)
62     html=page.read()
63     return html
64
65 def launch():
66     #指定起始编号:20的倍数
67     ques=raw_input(‘Start from number?(Multiples of 20) ‘)
68     startNum=int(ques)
69     if startNum%20 != 0:
70         print ‘Input number error!‘
71         return
72     for i in range(startNum,200,20):
73         print ‘Loading page %d/200 ...‘ %(i+1)
74         html=getHtml(i)
75         (curIdList,curLinkList)=parseHtmlUserId(html)
76         saveUserInfo(curIdList,curLinkList)
77         print ‘Sleeping.‘
78         time.sleep(5)
时间: 2024-10-12 16:00:33

[Python]从豆瓣电影批量获取看过这部电影的用户列表的相关文章

python的os模块批量获取目标路径下的文件名

目前在做一个项目开发与变更专项稽核,但是所抽取的目标项目,样本所附电子版文件上千个,需要判断文档完整性,就需要所有文档名清单. python的os模块好像是对这块比较擅长,就去翻了下文档,试着写了,效果还可以. 1 import os 2 3 #通过文件获取目标路径 4 file2=open(r'd:\dirname.txt','r') 5 a=file2.readlines() 6 file2.close() 7 8 #遍历目标路径下文件路径及名字,并写入新文件abc.txt 9 file1=

Python爬虫之模拟登录豆瓣获取最近看过的电影

哈哈哈,模拟登录成功啦啦啦啦啦~~~~~ 重要的事本来要说三遍,不过还是算了== 先上效果图: 众所周知,很多网站都设置了登录之后才能获取查看页面的权利,因此模拟登录成了爬取信息的第一步,这一步成功了,嘿嘿,just do it! 好,废话不多说,直接说重点: 首先,你应该要了解网站登录的流程以及你需要post的信息,以豆瓣为例: source:movie redir:https://movie.douban.com/mine?status=collect form_email:username

TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具

怀着鸡动的心情跟大家介绍一款国产开源运维软件TriAquae,轻松帮你搞定大部分运维工作!TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具,可以允许用户通过一台控制端管理上千台远程Linux服务器,开发者根据多年运维经验以及运维工程师日常工作的需求开发了很多实用的功能,该工具非常实用,并且使用简单,分分钟即可完成安装并开始利用TriAquae管理你的网络,此软件还在不断的开发和更新,目前已实现以下功能: •        支持WEB界面,所有以以下功能均以在WEB界面上

记录一下看过的电影

用来记录自己看过的好的电影 2019.3.16 哈哈哈哈 ,我是个电影爱好者,很喜欢外国那种慢节奏的剧情片,以前真的是没有耐心看完一部慢节奏的篇子,不过自从大二以来,真的是希望一个电影节奏越慢越好,最近毛概水课真的爽,一节课一部电影,以前也看了挺多电影,不过都忘得差不多了,先说明一下我最喜欢得电影是天堂电影院和海上钢琴师,一个是人间的善意,一个是出世的孤独,然后他们的配乐我真的真的是超级喜欢,the crsis,the crave , playing love,love theme......

Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶)

Python 2.7 IDE Pycharm 5.0.3 具体Selenium及PhantomJS请看Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 一些自动化应用实例请看Selenium+PhantomJS自动续借图书馆书籍 至于GUI的入门使用请看Python基于Tkinter的二输入规则器(乞丐版) 比较综合的GUI例子请看基于Python的参考文献生成器1.0 想了想,还是稍微人性化一点,做个成品GUI出来 起因 没办法,在知乎预告了要做个GUI

Python批量获取京东商品列表信息

今天在逛网站的时候无意间发现一个京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例 ps:商品ID这么获取:http://item.jd.com/954086.html 于是我就从Google上找了利用此接口批量获取价格信息的源码,稍作修改使其支持Python3(PS:通过这段代码,我对Python的易用性不再怀疑了,23333) #!/usr/bin/env python # -*- coding: utf-8 -*

Python登录豆瓣并爬取影评

上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分析用户行为等) 我们今天就用requests库来登录豆瓣然后爬取影评为例子,用代码讲解下Cookie的会话状态管理(登录)功能. 此教程仅用于学习,不得商业获利!如有侵害任何公司利益,请告知删除! 一.需求背景 之前猪哥带大家爬取了优酷的弹幕并生成词云图片

爬虫-批量获取图片

python版本:3.0 使用库: import urllib.request  #打开网页的库 import os                  #创建文件夹有关 程序作用:批量爬取煎蛋网上图片 视频链接:链接:http://pan.baidu.com/s/1mhLBwWo 密码:1n51 有一点与视频不同:视频中图片链接为http:打头,实际煎蛋网目前没有http:,会导致无法识别网页类型,不能正确下载,在保存是补上http:即可 基础知识: 1.对于某个网站,网址一般是按顺序编码的比如

Python爬虫实现抓取腾讯视频所有电影【实战必学】

2019-06-27 23:51:51 阅读数 407  收藏 更多 分类专栏: python爬虫 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者: Python新手学习之家 用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-   import re   import urllib2   from bs4 import BeautifulSoup   import stri