Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)

前面两章咱们介绍了Beautifuisoup4模块的简单使用,今天就用它来爬取豆瓣信息。话不多说,咱们开始吧。

一、拿到url地址
二、获取豆瓣数据
三、保存文件

需求: 爬取标题、评分、详情页的地址

在做这些工作之前,需要提前导入好这些库:

import requests
import re
import bs4
from bs4 import BeautifulSoup
from openpyxl import load_workbook     # 该模块是用来读写excel文件的

一、拿到url地址

咱们以第一页为例,一共有10页数据,先爬第一页。

url = 'https://movie.douban.com/top250?start=0&filter=

能够发现,start=0,这是第一页。第二页是start=25,每一页url是以25的倍数增长的,依次类推。

这部分代码如下:

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
    }
response = requests.get(url,headers=headers)

response.encoding = 'utf-8'

source = response.text

二、获取豆瓣数据

把网页内容转化成bs4对象。

html_element = BeautifulSoup(source,'lxml')

1.获取电影名称

通过标签,可以找到信息所在的位置,据此写出代码如下:
Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)_第1张图片

movieItemList = html_element.find_all('span', class_='title')

movieItem = [r.string for r in movieItemList]

通过查看列表长度,发现有49个名字,每部电影名称是由中外文名构成,因此理论上应有50个名字,即有一部电影没有外文名

# 其中有一些空格,把它们替换掉
i = 0
while i <= 48:
    movieItem[i] = re.sub('\xa0/\xa0','',movieItem[i])
    i += 1

print(movieItem)

此时得到了25部电影的中文名和24部电影的外文名。结果如下:
Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)_第2张图片
发现是霸王别姬这部电影没有外文名

2.获取电影别名

代码如下,同样根据标签信息写出:

otherTitle = html_element.find_all('span',class_='other')

otherTitle = [r.string for r in otherTitle]

3.获取电影评分

代码如下:

starList = html_element.find_all('span', class_='rating_num')

star = [r.string for r in starList]

4.获取电影详情链接

发现电影详情链接是类似https://movie.douban.com/subject/1292720这样的形式,根据a标签下的href属性,写出代码如下:

hrefs = html_element.find_all('a', class_= "")

# 总的链接列表
hreflist = [a.attrs['href'] for a in hrefs]

# 得到电影链接列表
link = [re.findall('(https://movie.douban.com/subject/\d+)',i) for i in hreflist]

# 删除空列表,取出中括号中的值,去除重复值(最终得到25条链接)
link = [x for x in link if x != []]
link = [h[0] for h in link]
link = list(set(link))
print(link)

结果如下:
Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)_第3张图片

三、保存文件

保存文件这里,咱们使用excel中的xlsx文件。这部分代码如下:

# 创建新的excel表格xlsx文件
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = "sheet1"
workbook.save(filename = "豆瓣电影.xlsx")

# 写入数据
workbook = load_workbook('豆瓣电影.xlsx')
sheet=workbook.active

# 给表格赋值
# 表头
data = [["电影名称","评分","详情链接"]]
for row in data:
    sheet.append(row)
    
# 电影名称
k = 0
l = 2
while k <= 48 and l <= 50:
        sheet["A{}".format(l)]=movieItem[k]
        l += 1
        k += 1

# 电影评分
m = 0
l = 2
while m <= 24 and l <= 27:
        sheet["B{}".format(l)]=star[m]
        l += 1
        m += 1

# 电影详情链接
n = 0
l = 2
while n <= 24 and l <= 27:
        sheet["C{}".format(l)]=link[n]
        l += 1
        n += 1

workbook.save('豆瓣电影.xlsx')

执行完以上代码,得到了一个xlsx文件。打开后结果如下:
Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)_第4张图片
至此,咱们用bs4模块成功爬取了豆瓣信息。其中涉及到了一些数据整理和自动化办公的内容,这部分值得好好琢磨一下。

 
 
 
第一篇:Python的要点(搭建环境、安装配置、第三方库导入方法详细过程)
第二篇:Python爬虫初探(一)——了解爬虫
第三篇:Python爬虫初探(二)——爬虫的请求模块
第四篇:Python爬虫初探(三)——爬虫之正则表达式介绍
第五篇:Python爬虫初探(四)——爬虫之正则表达式实战(爬取图片)
第六篇:Python爬虫初探(五)——爬虫之xpath与lxml库的使用
第七篇:Python爬虫初探(六)——爬虫之xpath实战(爬取高考分数线信息)
第八篇:Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
第九篇:Python爬虫初探(八)——爬虫之Beautifulsoup4介绍(Ⅱ)

你可能感兴趣的:(python,爬虫)