成果
源码
import requests
from bs4 import BeautifulSoup
from WebWorm.RandomHeader import getRandomHeader
import re
# 根据url返回HTML内容
def parse(url):
# 设置随机头
headers = {"user-agent": getRandomHeader()}
# 请求URL
request = requests.get(url, headers=headers)
# 设置编码
request.encoding = 'utf-8'
# 请求到的内容
html = request.text
# 返回请求到的内容
return html
# 爬取电影250
def film250():
# 存放所有的电影的信息
more = []
for i in range(0, 250, 25):
# 拼接URL
url = 'https://movie.douban.com/top250?start=' + str(i)
# 获得URL的HTML内容
html = parse(url)
# 解析HTML
info = BeautifulSoup(html, "html.parser")
# 获得页面中的li元素
li = info.find(name="ol", attrs={"class": "grid_view"}).find_all('li')
# 遍历li元素
for i in li:
# 存放一个电影的信息
one = []
# 获取电影名称
span = i.find(name="div", attrs={"class": "hd"}).find('a').find_all('span')
name = ''
for k in span:
# 拼接电影名称
name += k.text.strip()
# 获得电影评分
score = i.find(name="div", attrs={"class": "bd"}).find(name="div", attrs={"class": "star"}).find(
name="span", attrs={"class": "rating_num"}).text
try:
# 获得电影的引文
quote = i.find(name="p", attrs={"class": "quote"}).find('span').text
except:
quote = "该电影没有引文"
# 把信息放入数组
one.append(name)
one.append(score)
one.append(quote)
# 把一个电影信息放入大数组
more.append(one)
# 把数组的信息写入文件
with open('film250.txt', mode='w', encoding='utf-8') as file:
for i in more:
# 拼接分隔符
info = '|||'.join(i)
# 把数据写入文件
file.write(info + '\n')
print('爬取电影250成功')
# 爬取书籍250
def book250():
# 存放所有书籍的信息
more = []
for i in range(0, 250, 25):
# 拼接URL
url = 'https://book.douban.com/top250?start=' + str(i)
# 获取HTML页面
html = parse(url)
# 解析HTML
info = BeautifulSoup(html, "html.parser")
# 获得页面中的table元素
table = info.find(name="div", attrs={"class": "indent"}).find_all('table')
# 遍历table
for i in table:
# 存放一本书的所有信息
one = []
# 获取书籍名称
name = i.find(name="div", attrs={"class": "pl2"}).find('a').text.strip().replace(' ', '').replace('\n', '')
# 获取书籍作者
author = i.find(name="p", attrs={"class": "pl"}).text
# 获取书籍评分
score = i.find(name="div", attrs={"class": "star clearfix"}).find(name="span",
attrs={"class": "rating_nums"}).text
# 获取书籍引言
try:
quote = i.find(name="p", attrs={"class": "quote"}).find('span').text
except:
quote = '该书没有引文'
# 把信息加入数组
one.append(name)
one.append(author)
one.append(score)
one.append(quote)
# 把一本书籍的信息加入大数组
more.append(one)
# 把数组里的信息写入文件
with open('book250.txt', mode='w', encoding='utf-8') as file:
for i in more:
# 拼接分隔符
info = '|||'.join(i)
# 把数据写入文件
file.write(info + '\n')
print('爬取书籍250成功')
# 爬取音乐250
def music250():
# 存放所有音乐的信息
more = []
for i in range(0, 250, 25):
# 拼接URL
url = 'https://music.douban.com/top250?start=' + str(i)
# 获取HTML页面
html = parse(url)
# 解析HTML
info = BeautifulSoup(html, "html.parser")
# 获得页面中的table元素
table = info.find(name="div", attrs={"class": "indent"}).find_all('table')
for i in table:
# 存放一个音乐的全部信息
one = []
# 获取音乐名称
name = i.find(name="div", attrs={"class": "pl2"}).find('a').text.strip().replace('\n', '')
name = re.sub("[ ]{2,}", "/", name)
# 获取音乐作者
author = i.find(name="p", attrs={"class": "pl"}).text
# 获取音乐评分
score = i.find(name="div", attrs={"class": "star clearfix"}).find(name="span",
attrs={"class": "rating_nums"}).text
# 把音乐信息加入数组
one.append(name)
one.append(author)
one.append(score)
# 把一个音乐信息加入大数组
more.append(one)
# 把数组中信息保存为文件
with open('music250.txt', mode='w', encoding='utf-8') as file:
for i in more:
# 拼接分隔符
info = '|||'.join(i)
# 把数据写入文件
file.write(info + '\n')
print('爬取音乐250成功')
if __name__ == '__main__':
# 爬取电影
film250()
# 爬取书籍
book250()
# 爬取音乐
music250()
总结
只爬取了自我感觉价值比较高的字段,例如:电影名、评分、引言等。
有问题及时反馈,共同成长。