对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务。

1、urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的。安装方式:pip install beautifulsoup4

其官方文档中文版地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

2、爬取任务:爬取的内容为每部电影的名字 导演 主演 年代 国家 类型 评分 评分人数

3、展示方法:(1)、直接打印 (2)、存到Mysql数据库

4、分析:

 网站布局:1、Top250共10页  每页25部电影  网站格式:https://movie.douban.com/top250?start=[0,25,50,75,100,125,150,175,200,225] 每一个数字代表一行
对其中一部电影进行分析:
<div class="hd">

                           <a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a><span class="playable">[可播放]</span>
</div>
<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p> <div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.6</span>
<span property="v:best" content="10.0"></span>
<span>765942人评价</span>
</div> <p class="quote">
<span class="inq">希望让人自由。</span>
</p>
</div>

主要部分在 div class='article'下的 ol class='grid_view'中的 li里面。各个信息都可以在这里面找到。

《一》利用BeautifulSoup的find函数,可以轻松的实现打印功能,保存到本地csv中:

代码如下:

#-*- encoding:utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import re
import csv
####本程序为爬取豆瓣电影Top250 ,先放在本地txt文档中,后续放到Mysql中
####本程序为bs4,后续改为Scrapy
###爬取的内容为每部电影的名字 导演 主演 年代 国家 类型 评分 评分人数 。。。 """分析部分: 网站布局:1、Top250共10页 每页25部电影 网站格式:https://movie.douban.com/top250?start= """ def crawl(baseurl,bias):
try:
html=urlopen(baseurl+'?start=%d' %bias)
except HTTPError:
return None
bsObj=BeautifulSoup(html,'lxml')
totalContent=bsObj.find('ol',{'class':'grid_view'}).findAll('li')###每一页25个电影的全部信息
retList=[]
for eachMovie in totalContent:
rank=eachMovie.em.get_text() ###获取排名
href=eachMovie.a['href'] ####获取到连接地址
nameList=eachMovie.find_all('span',{'class':'title'})
Chinesename=nameList[0].get_text() ### 中文名字
if(len(nameList)==2):
Englishname=nameList[1].get_text() ##英文名字
else:
Englishname="None"
othername=eachMovie.find('span',{'class':'other'}).get_text().replace('/','')
relate=eachMovie.find('p',{'class':''}).get_text().replace(' ','') ###主演,导演等信息 需要分割处理
rating=eachMovie.find('span',{'class':'rating_num','property':'v:average'}).get_text() ##评分
starDiv=eachMovie.find('div',{'class':'star'})
ratingN=starDiv.find_all('span')[3].get_text()
ratingNum=re.split(r"\D",ratingN)[0] ####评价的人数
try:
abstract=eachMovie.find('span',{'class':'inq'}).get_text()
except AttributeError:
abstract="None"
OutputStr="排名: "+rank+'\t网址: '+href+'\t中文名: '+Chinesename+'\t英文名: '+Englishname+'\t别名: '+othername+\
'\t评分: '+rating+'\t评价人数: '+ratingNum+'\t摘要: '+abstract+"\t"+'相关信息:'+relate
print(OutputStr)
eachList=[rank,href,Chinesename,Englishname,othername,rating,ratingNum,abstract,relate]
retList.append(eachList)
return retList
def storeToCsv(AttributeList):
csvFile=open('res.csv','a+',encoding='utf-8')
try:
writer=csv.writer(csvFile)
writer.writerow(('排名',"网址",'中文名','英文名','别名','评分','评价人数','摘要','相关信息'))
for i in range(10):
for j in range(25):
writer.writerow(AttributeList[i][j])
finally:
csvFile.close() if __name__=='__main__':
url='https://movie.douban.com/top250'
biasList=[0,25,50,75,100,125,150,175,200,225]
allList=[]
for eachBias in biasList:
s=crawl(url,eachBias)
allList.append(s)
storeToCsv(allList)
 运行结果如下图:
 

urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250的更多相关文章

  1. python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库

    python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...

  2. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...

  3. python 爬虫&爬取豆瓣电影top250

    爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...

  4. Python爬虫入门:爬取豆瓣电影TOP250

    一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...

  5. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  6. scrapy爬取豆瓣电影top250

    # -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...

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

    一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...

  8. Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed

    好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...

  9. Scrapy爬虫(4)爬取豆瓣电影Top250图片

      在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy.   本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...

随机推荐

  1. 弹性盒子之wap端布局

    发现移动端用弹性盒子布局起来更加的方便,box-flex:val;特别是图文展示的时候,如下面的 <!DOCTYPE html> <html> <head> < ...

  2. AFNetworking之缓存篇

    苦苦看了我两天,最近后台为了减轻压力,要我做缓存,我说好吧...... 借鉴了别人的说法找到一张图可以看明白好多:       这个是我比较战成一种方案. 好了直接上代码了 首先我们要有自己缓存的类 ...

  3. 悲惨记忆。。QImage之 pixel() && setPixel()参数不要给反了。。。

    QImage repairImg(width, height, QImage::Format_Mono); ; row < height; row++) { // uchar* ucRow = ...

  4. Python学习路程CMDB

    本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...

  5. 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)

    1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表)    例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...

  6. Go语言并发编程示例 分享(含有源代码)

    GO语言并发示例分享: ppt http://files.cnblogs.com/files/yuhan-TB/GO%E8%AF%AD%E8%A8%80.pptx 代码, 实际就是<<Go ...

  7. 我的OpenCV学习笔记:VideoCapture类

    opnCV  学习博客http://blog.csdn.net/thefutureisour/article/details/7472104 1 OpneCV中的数据共享机制 OpenCV是一个很不错 ...

  8. JSP页面组件

    一.JSP指令 1.page指令 定义:将关于JSP页面一般设置通知给web容器的属性. 语法:<%@ page attribute_list%> 属性:language;extends; ...

  9. pip和requests模块的安装

    1.配置python的环境变量 在path中加入pyhton的环境变量,如我的是E:\Python27 2. 如果没有pip,一个帮助软件管理的东东(现在的版本一般有,若有跳到3) 去https:// ...

  10. 解决 WPF AllowsTransparency = true 和 Webbrowser 等控件显示冲突

    代码: public class FormsWebBrowser { Window _owner; FrameworkElement _placementTarget; Form _form; AxA ...