urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250
对于简单的爬虫任务,尤其对于初学者,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的更多相关文章
- python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库
python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- Python爬虫入门:爬取豆瓣电影TOP250
一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- scrapy爬取豆瓣电影top250
# -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...
- 【转】爬取豆瓣电影top250提取电影分类进行数据分析
一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
- Scrapy爬虫(4)爬取豆瓣电影Top250图片
在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy. 本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...
随机推荐
- GCHandler的使用
众所周知,我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作. 但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个 ...
- JS总结 循环 退出循环 函数
while循环 while(条件){条件成立就执行的代码} *一般条件变量需要递增,否则会进入死循环(无限循环),浏览器会崩溃甚至电脑死机 例如,逐行输出1-100的数字 var i = 1; whi ...
- SQL位运算符
十进制 170 转二进制为:0000 0000 1010 1010 十进制 75 转二进制为:0000 0000 0100 1011 1.&(位与) 上下运算,按照与的运算规则:0& ...
- C#中去除字符串空格的三种方法
static void Main() { //demo1 除去空格,提取出各个单词 string s = "a b c"; string[] word = s.Split(new ...
- 第10章 嵌入式Linux的调试技术
printk函数运行在内核空间,printf函数运行在用户空间.也就是说像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息.printk函数在控制台(也称终端)显示消息是通过 ...
- 第一章 web应用程序开发原理
[总结] 1.计算机模式 :主机 哑端计算机模式 优点:速度快 反应快 维护修理方便 数据安全性高 缺点:单台计算机安全操作 应用程序难维护 难以跨出平台 客户端 客户计算机模式 优点:速度快 ...
- JSP页面组件
一.JSP指令 1.page指令 定义:将关于JSP页面一般设置通知给web容器的属性. 语法:<%@ page attribute_list%> 属性:language;extends; ...
- clip 属性剪裁绝对定位元素
如果left >= right或者bottom <= top,则元素会被完全裁掉而不可见,即“隐藏”.通过这种方式隐藏的元素是可以被屏幕阅读器等辅助设备识别的,从而提高了页面的可用性. I ...
- oracle行转列,decode 等用法
DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值.函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式.当然,如果未能与任何一个实参序偶匹配成功,则函数也有默 ...
- C++模板实例化
深入理解C++中第七章提到模板实例化参数的选择:函数的决议结果只和函数参数有关和返回值无关.记录一下. 测试程序如下: #include <iostream> using namespac ...
