前面两章咱们介绍了Beautifuisoup4模块的简单使用,今天就用它来爬取豆瓣信息。话不多说,咱们开始吧。
一、拿到url地址
二、获取豆瓣数据
三、保存文件
需求: 爬取标题、评分、详情页的地址
在做这些工作之前,需要提前导入好这些库:
import requests
import re
import bs4
from bs4 import BeautifulSoup
from openpyxl import load_workbook # 该模块是用来读写excel文件的
咱们以第一页为例,一共有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')
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部电影的外文名。结果如下:
发现是霸王别姬这部电影没有外文名。
代码如下,同样根据标签信息写出:
otherTitle = html_element.find_all('span',class_='other')
otherTitle = [r.string for r in otherTitle]
代码如下:
starList = html_element.find_all('span', class_='rating_num')
star = [r.string for r in starList]
发现电影详情链接是类似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)
保存文件这里,咱们使用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文件。打开后结果如下:
至此,咱们用bs4模块成功爬取了豆瓣信息。其中涉及到了一些数据整理和自动化办公的内容,这部分值得好好琢磨一下。
第一篇:Python的要点(搭建环境、安装配置、第三方库导入方法详细过程)
第二篇:Python爬虫初探(一)——了解爬虫
第三篇:Python爬虫初探(二)——爬虫的请求模块
第四篇:Python爬虫初探(三)——爬虫之正则表达式介绍
第五篇:Python爬虫初探(四)——爬虫之正则表达式实战(爬取图片)
第六篇:Python爬虫初探(五)——爬虫之xpath与lxml库的使用
第七篇:Python爬虫初探(六)——爬虫之xpath实战(爬取高考分数线信息)
第八篇:Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
第九篇:Python爬虫初探(八)——爬虫之Beautifulsoup4介绍(Ⅱ)