java爬虫爬取豆瓣电影_python爬虫之旅(1):urllib2 + BeautifulSoup爬取豆瓣电影TOP250

该博客介绍了如何使用Python的urllib2和BeautifulSoup库爬取并解析豆瓣电影Top250的网页内容,将数据存储到Excel文件中。文章详细展示了如何获取电影详情URL、图片URL、中文名和简介,并处理分页爬取。
摘要由CSDN通过智能技术生成

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 设置编码格式为utf-8,为了可以打印出中文字符

import sys

reload(sys)

sys.setdefaultencoding('utf8')

# 导入urllib2模块,用于通过url获取网页的内容

import urllib2

# 导入BeautifulSoup模块(需要安装),用于解析网页的内容

from bs4 import BeautifulSoup

# 导入python操作excel模块

import xlwt

# 通过url得到页面全部内容

def get_url_content(url):

# 构造发送请求

request = urllib2.Request(url)

# 发出请求并取得响应

response = urllib2.urlopen(request)

# 获取网页内容

html = response.read()

# 返回网页内容

return html

# 通过xlwt(python操作office的模块)设置utf编码格式,并返回一个excel对象'book'

book=xlwt.Workbook(encoding='utf-8',style_compression=0)

# 通过这个book对象新建一个sheet,命名为豆瓣电影Top250

sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)

# 给这个sheet添加4列名称

sheet.write(0,0,'电影详情url')

sheet.write(0,1,'电影图片url')

sheet.write(0,2,'电影中文名')

sheet.write(0,3,'电影简介')

# 定义一个全局的行数n,为了下面parser_to_excel方法写入excel时可以找到从哪一行开始写入

n=1

# 通过BeautifulSoup解析后的结构来获取内容,并存入excel

# 注意,因为不同的网页结构不同,爬取其他网页时,只需要改动这里的内容就可以了,其他东西不用改(main方法里的某些地方还是要改动,但主题思想改变)

# 存入excel也是这里的特定操作,当然后面也可以选择存入数据库或者是缓存

def parser_to_excel(soup):

# 查看网页可以看到我们要获取的信息都在class='grid_view'里面,所以获取到它,再获取到其中所有的li标签,组成一个list

content_list = soup.find(class_='grid_view').find_all('li')

# 循环li标签列表

for film_item in content_list:

# 因为通过查看网页,可以看见一个电影节点里只有两个a标签,一个是图片链接,一个是名称链接

# 所以这里通过第一个a标签获取电影详情url和电影图片pic地址

film_detail_url = film_item.find_all('a')[0].get('href')

film_pic = film_item.find_all('a')[0].find('img').get('src')

# 可以看到,节点中有两个class='title'的标签,一个是电影的中文名称,一个是英文名称,这里我们取第一个就好

film_name = film_item.find_all(class_='title')[0].text

# 可以看到,节点中有一个class='inq'的标签,里面的内容是一句话简介,我们通过class获取就好

# 因为第150个电影没有简介,所以这里用if处理一下,不然会抛异常

if film_item.find(class_='inq') != None:

film_quote = film_item.find(class_='inq').text

# 好了,就先获取这些信息,现在把爬到的信息打印一下

print ("正在爬取的信息如下:电影详情:"+film_detail_url+",电影图片:"+film_pic+",电影中文名:"+film_name+",电影简介:"+film_quote)

# 接下来就把这些信息存入excel

# sheet就是前面已经初始化好的全局sheet

# 逐个写入sheet,前两个数字代表行列(1,0,name)就是在第二行第一列写入name

# 这里的行我们取方法外面的外面的n,代表当前从第n行开始写

# 但这里这个n必须定义为全局变量,不然会报错

global n

sheet.write(n,0,film_detail_url)#往第n行,弟0列写入详情url信息,下同

sheet.write(n,1,film_pic)

sheet.write(n,2,film_name)

sheet.write(n,3,film_quote)

# 每次存入把n+1,代表下一次从下一行开始写

print("正往第"+str(n)+"行写入数据")

# 每次循环完,行数+1

n=n+1

# 程序从这里运行(这里是固定写法)

if __name__ == "__main__":

# 设置爬取的初始url

base_url = 'https://movie.douban.com/top250'

# 获取初始化页面的内容

content = get_url_content(base_url)

# 把内容解析成BeautifulSoup结构(BeautifulSoup的内容可以看下http://beautifulsoup.readthedocs.io/zh_CN/latest/)

soup = BeautifulSoup(content, 'html.parser')

# 获取当前页的信息并存入excel

parser_to_excel(soup)

# 获取其他要爬取的url地址

# 可以通过按f12看到分页的代码写在class='paginator'里

# 所以我们先获取到class=‘paginator’的div

paginator_div = soup.find(class_='paginator')

# 再获取div中所有的a标签,并循环获取到其中的href(跳转链接),拼接url后逐个爬取

for link in paginator_div.find_all('a'):

# 因为href里都是"?start=25&filter="这种形式,缺少网页前缀,所以拼接一下

other_url = base_url+link.get('href')

print("正在爬取url:"+other_url)

# 同上,获取到其他网页的内容

other_url_content = get_url_content(other_url)

# 同上,获取到内容后通过BeautifulSoup,解析

other_url_soup = BeautifulSoup(other_url_content, 'html.parser')

#把分页里的2,3...等页里面的信息解析并存入excel

parser_to_excel(other_url_soup)

book.save(u'豆瓣电影Top250.xlsx')#保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值