首先我们导入几个pyhton3的库:

from urllib import request
import urllib
from html.parser import HTMLParser

在Python2和Python3之间一个重要区别就是,在Python2有urllib,urllib2两个库,在Python3整合到一起,里面的函数方式也有一点变,先定义一个函数,将header,url,request,都打包成一个函数方便调用,且看下面代码:

def print_movies(url):
# 伪装成浏览器访问网站,但其实没啥用,很容易被中间件检测出来,但没有又不行,所以蛮写吧
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
# Python3的urllib
req = urllib.request.Request(url, headers=header)
s = urllib.request.urlopen(req)
parser = MovieParser()
parser.feed((s.read()).decode('utf-8'))
s.close()

再重载HTMLParser库的handle_starttag(self, tag, attrs),系统就会默认调用用户重载的,具体调用方式在官方文档里面详细介绍:HTMLParser,

class MovieParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.movies = []
# 重载HTMLParser自带的函数
def handle_starttag(self, tag, attrs):
def _attr(attrlist, attrname):
for attr in attrlist:
if attr[0] == attrname:
return attr[1]
return None
# 可以在这class后面找到每个li标签的特征属性比如catrgory在下面判断
if tag == 'li' and _attr(attrs, 'data-title'):
movie= {}
movie['title'] = _attr(attrs, 'data-title')
movie['rate'] = _attr(attrs, 'data-rate')
movie['director'] = _attr(attrs, 'data-director')
movie['actors'] = _attr(attrs, 'data-actors')
self.movies.append(movie)
print('%(title)s|%(rate)s|%(director)s|%(actors)s' % movie)

当我们执行到parser.feed((s.read()).decode('utf-8'))时,知道为什么要这样写,首先parser时HTMLParser的子类所以包括feed(),在注入数据时,s.read()是返回bytes类型,但feed()只接受str类型,所以直接在后面加个decode('utf-8')即转码(三个bytes转换为一个中文),又可以转换为str,基本获取数据就这么简单,要是想获取别的网站的数据,可以换个url和条件判断就可以了,我把全部代码贴上来:

from urllib import request
import urllib
from html.parser import HTMLParser class MovieParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.movies = []
# 重载HTMLParser自带的函数
def handle_starttag(self, tag, attrs):
def _attr(attrlist, attrname):
for attr in attrlist:
if attr[0] == attrname:
return attr[1]
return None
# 可以在这class后面找到每个li标签的特征属性比如catrgory在下面判断
if tag == 'li' and _attr(attrs, 'data-title'):
movie= {}
movie['title'] = _attr(attrs, 'data-title')
movie['rate'] = _attr(attrs, 'data-rate')
movie['director'] = _attr(attrs, 'data-director')
movie['actors'] = _attr(attrs, 'data-actors')
self.movies.append(movie)
print('%(title)s|%(rate)s|%(director)s|%(actors)s' % movie) def print_movies(url):
# 伪装成浏览器访问网站,但其实没啥用,很容易被中间件检测出来,但没有又不行,所以蛮写吧
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
# Python3的urllib
req = urllib.request.Request(url, headers=header)
s = urllib.request.urlopen(req)
parser = MovieParser()
parser.feed((s.read()).decode('utf-8'))
s.close() if __name__ == '__main__':
url = 'https://movie.douban.com/'
# 返回一个电影列表
print_movies(url)

运行结果为:

Python3.5:爬取网站上电影数据的更多相关文章

  1. Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

  2. 使用scrapy爬取网站的商品数据

    目标是爬取网站http://www.muyingzhijia.com/上全部的商品数据信息,包括商品的一级类别,二级类别,商品title,品牌,价格. 搜索了一下,python的scrapy是一个不错 ...

  3. 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!

    爬取豆瓣Top250电影的评分.海报.影评等数据!   本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序.   此项目过程是运用requests请求库来获取h ...

  4. 使用Selenium爬取网站表格类数据

    本文转载自一下网站:Python爬虫(5):Selenium 爬取东方财富网股票财务报表 https://www.makcyun.top/web_scraping_withpython5.html 需 ...

  5. C# 爬取网页上的数据

    最近工作中需求定时爬取不同城市每天的温度.其实就是通过编程的方法去抓取不同网站网页进行分析筛选的过程..NET提供了很多类去访问并获得远程网页的数据,比如WebClient类和HttpWebReque ...

  6. Python3爬虫爬取淘宝商品数据

    这次的主要的目的是从淘宝的搜索页面获取商品的信息.其实分析页面找到信息很容易,页面信息的存放都是以静态的方式直接嵌套的页面上的,很容易找到.主要困难是将信息从HTML源码中剥离出来,数据和网页源码结合 ...

  7. python3 requests_html 爬取智联招聘数据(简易版)

    PS重点:我回来了-----我回来了-----我回来了 1. 基础需要: python3 基础 html5 CS3 基础 2.库的选择: 原始库  urllib2  (这个库早些年的用过,后来淡忘了) ...

  8. python 实现爬取网站下所有URL

    python3 实现爬取网站下所有URL 获取首页元素信息: 首页的URL链接获取: 遍历第一次返回的结果: 递归循环遍历: 全部代码如下: 小结: python3.6 requests && ...

  9. Python转页爬取某铝业网站上的数据

    天行健,君子以自强不息:地势坤,君子以厚德载物! 好了废话不多说,正式进入主题,前段时间应朋友的请求,爬取了某铝业网站上的数据.刚开始呢,还是挺不愿意的(主要是自己没有完整的爬取过网上的数据哎,即是不 ...

随机推荐

  1. Hue 之 SparkSql interpreters的配置及使用

    1.环境说明: HDP 2.4 V3 sandbox hue 4.0.0 2.hue 4.0.0 编译及安装 地址:https://github.com/cloudera/hue/releases/t ...

  2. 企业级Tomcat部署实践及安全调优

    1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...

  3. TFboy养成记 tensorboard

    首先介绍几个用法: with tf.name_scope(name = "inputs"): 这个是用于区分区域的.如,train,inputs等. xs = tf.placeho ...

  4. 《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...

  5. Java基础回顾(3)

    数组:用一种数据类型的集合 ★数组元素下标从0开始. 数组的复制.扩容: ①.System.arraycopy(源数组, 源数组的初始下标,                     目标数组, 目标数 ...

  6. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)

    service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一 ...

  7. 逆向实用干货分享,Hook技术第二讲,之虚表HOOK

    逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...

  8. 高质量PHP代码的50个实用技巧必备(上)

    1.不要使用相对路径 常常会看到: ? 1 require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. ...

  9. OGNL简介

    OGNL 一:OGNL简介 OGNL的全称是Object  Graph  Navigation  Language即对象导航语音.它是一个开源项目,工作在视图层,用来取代页面中的java脚本.简化数据 ...

  10. 原生Js实现拖拽(适用于pc和移动端)

    效果: HTML和CSS部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...