python爬取豆瓣电影首页超链接

什么是爬虫? 

我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了。

代码:

  1 from urllib import request
  2 from collections import deque
  3 from pybloom_live import BloomFilter
  4 from lxml import etree
  5 import hashlib
  6
  7 class crawel_bfs:
  8     request_header={
  9             ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘,
 10             ‘Accept-Encoding‘: ‘br‘,
 11             ‘Accept-Language‘: ‘zh-CN,zh;q=0.9‘,
 12             ‘Cache-Control‘: ‘max-age=0‘,
 13             ‘Connection‘: ‘keep-alive‘,
 14             ‘Cookie‘: ‘bid=Kn9AT5duD7k; gr_user_id=32e433a7-19f0-4e17-80c4-56b58d7c0056; _vwo_uuid_v2=5985FEE132C29EC9C840D6C5EDD95323|67c2ccc8467fc02a9cce6928e86ea013; ll="118281"; __yadk_uid=I4Ki5RUaEWOUdpVIjJfRYo1MEuaW36hA; __utmv=30149280.16369; viewed="10483489_1115600_2230208_26857712_1569487_1623164_26708119_26677686"; __utma=30149280.965685249.1516632348.1528892392.1530880979.81; __utmc=30149280; __utmz=30149280.1530880979.81.57.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmt=1; __utmb=30149280.1.10.1530880979; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1530880982%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D; _pk_ses.100001.4cf6=*; __utma=223695111.2038558801.1520348154.1528892435.1530880982.55; __utmb=223695111.0.10.1530880982; __utmc=223695111; __utmz=223695111.1530880982.55.51.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; _pk_id.100001.4cf6=da4243a2a9e242f1.1520348154.54.1530881042.1528892472.‘,
 15             ‘Host‘: ‘movie.douban.com‘,
 16             ‘Referer‘: ‘https://www.douban.com/‘,
 17             ‘Upgrade-Insecure-Requests‘: ‘1‘,
 18             ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘
 19             }
 20
 21     cur_level=0
 22     max_level=2
 23
 24     download_bf=BloomFilter(1024*1024,0.01)
 25
 26     childque=deque()
 27     nowque=deque()
 28
 29     def __init__(self,url,file_md5name,file_urlname):
 30         self.file_urlNameMd5_name=file_md5name
 31         self.file_urlName_name=file_urlname
 32         self.deal_file_md5=open(self.file_urlNameMd5_name,‘r‘)
 33         self.file_md5=self.deal_file_md5.readlines()
 34         #用于输入现有的文件
 35         for url_md5_name in self.file_md5:
 36             #-1表示的是换行符,读入时换行符不会占据两个字符
 37             self.download_bf.add(url_md5_name[:-1])
 38         self.deal_file_md5.close()
 39         self.file_md5=open(self.file_urlNameMd5_name,‘a‘)
 40         self.file_url=open(self.file_urlName_name,‘a‘)
 41         self.nowque.append(url)
 42
 43     def indeque(self,url):
 44         self.nowque.append(url)
 45
 46     def outdeque(self):
 47         try:
 48             url=self.nowque.popleft()
 49             return url
 50         except Exception:
 51             self.cur_level+=1
 52             if self.cur_level==self.max_level:
 53                 return None
 54             if len(self.childque)==0:
 55                 return None
 56             self.nowque=self.childque
 57             self.childque=deque()
 58             return self.nowque.popleft()
 59
 60     def crawler(self,url):
 61           try:
 62             #创建一个request对象,封装一个报文对象
 63             req=request.Request(url,headers=self.request_header)
 64             #发送报文
 65             response=request.urlopen(req)
 66             html_page=response.read()
 67             #按照固定编码解码
 68             html=etree.HTML(html_page.lower().decode(‘utf-8‘))
 69             url_list=html.xpath(‘//a/@href‘)
 70             for url in url_list:
 71                 if url.find(‘javascript:‘)!=-1:
 72                     continue
 73                 if url.startswith(‘http://‘) is False:
 74                     if url.startswith(‘/‘) is True:
 75                         url=‘http://movie.douban.com‘+url
 76                     else:
 77                         continue
 78                 if url[-1]==‘/‘:
 79                     url=url[:-1]
 80                 temp=hashlib.md5(url.encode(‘utf-8‘)).hexdigest()
 81                 if temp not in self.download_bf:
 82                     self.download_bf.add(url)
 83                     self.childque.append(url)
 84                     self.file_md5.write(temp+‘\n‘)
 85                     self.file_url.write(url+‘\n‘)
 86           except Exception:
 87             print("出现异常")
 88
 89     def startcrawler(self):
 90         while True:
 91             url=self.outdeque()
 92             if url!=None:
 93                 print("现在爬取"+url+"的超链接")
 94                 self.crawler(url)
 95             else:
 96                 break
 97         self.file_md5.close()
 98         self.file_url.close()
 99
100 crawel=crawel_bfs("https://movie.douban.com/",‘urlmd5.txt‘,
101                   ‘urlname.txt‘)
102 crawel.startcrawler()

原文地址:https://www.cnblogs.com/huanghuangwei/p/11736165.html

时间: 2024-11-07 05:48:44

python爬取豆瓣电影首页超链接的相关文章

利用Python爬取豆瓣电影

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE 有3个字段是非常重要的: 1.sort=T 2.range=0,10 3.tag

团队-Python 爬取豆瓣电影top250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P 第二页url https://movie.douban.com/subject/26752088/comments?sta

python 爬取 豆瓣电影top250 存储到mysql

数据分析师 想在本地找一些开源bi做一些数据可视化的呈现 先在网上扒拉点数据,存储到了本地 主要是学习学习python的爬虫 先在本地建了mysql的表 (比较粗暴) CREATE TABLE `doubanmovie` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text COMMENT '电影名称', `director` text COMMENT '导演', `actor` text COMMENT '演员', `style` text C

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

Python开发简单爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/top250 1)确定目标网站的请求头: 打开目标网站,在网页空白处点击鼠标右键,选择"检查".(小编使用的是谷歌浏览器). 点击"network",在弹出页面若长时间没有数据显示,则试一下F5刷新. 可以得到目标网页中Host和User-Agent两项. 2)找到爬取目标数据(即电影名称)在页面中的位置 右键"检查",选择"Elem

Python爬虫入门 | 爬取豆瓣电影信息

这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬虫的大门啦~好啦,正式开始我们的第二节课<爬取豆瓣电影信息>吧!啦啦哩啦啦,都看黑板~1. 爬虫原理1.1 爬虫基本原理听了那么多的爬虫,到底什么是爬虫?爬虫又是如何工作的呢?我们先从"爬虫原理"说起.爬虫又称为网页蜘蛛,是一种程序或脚本.但重点在于:它能够按照一定的规则,自动

《团队-爬取豆瓣电影TOP250-成员简介及分工》

团队项目<爬取豆瓣电影TOP250>开发人员之一:张晓亮,性别男,15级软件技术专业学生,喜欢爱书和浏览网页信息.掌握的知识:Java语言开发,熟悉Python,C等开发语言.了解HTML5,CSS3,Javasprict等前端开发知识.可以熟练使用eclipse,Sequel Pro等软件开发工具. 在本次开发中担任:系统分析.对系统功能需求分析.用户体验设计进行归拢.对系统进度的控制,风险评估进有把控和人员的配置等

【转】爬取豆瓣电影top250提取电影分类进行数据分析

一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了,接下来就使用我们python强大的request库先获取网页内容下来吧!获取内容后,再使用一个好用的lxml库来分析网页内容,然后获取我们的内容就可以做下一步操作了.先贴出使用request库和lxml分析的代码 1 def get_page(i): 2 url = 'https://movie.d