1.分析
针对所爬去的Url进行分析:
爬取的网址是:https://movie.douban.com/top250?start=0&filter=
分析网址'?'符号后的参数,第一个参数'start=0',这个代表页数,‘=0’时代表第一页,‘=25’代表第二页,以此类推。
1.1页面分析
明确要爬取的元素 :排名、名字、导演、评语、评分
1.2 页面代码分析
2.网站信息爬取
2.1 获取每部分电影信息
def get_html(web_url):
header = {
"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
html = requests.get(url=web_url,headers= header).text
soup = BeautifulSoup(html,'lxml')
data = soup.find('ol').find_all('li') #截取需要的内容
return data
【代码说明】
requests.get()函数,会根据参数中url的链接,返回response对象
.text会将response对象转换成str类型
find_all()函数,会将html文本中的ol标签下的每一个li标签中的内容筛选出来
2.2 筛选信息保存进入文本
def get_info(all_move):
f = open("./douban.txt", "a",encoding='UTF-8')
for info in all_move:
#排名
nums = info.find('em')
num = nums.get_text()
#名字
names = info.find("span") # 名字比较简单 直接获取第一个span就是
name = names.get_text()
#导演
charactors = info.find("p") # 这段信息中有太多非法符号你需要替换掉
charactor = charactors.get_text().replace(" ", "").replace("\n", "") # 使信息排列规律
charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
"\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")
#评语
remarks = info.find_all("span", {"class": "inq"})
if remarks: # 这个判断是因为有的电影没有评语,你需要做判断
remark = remarks[0].get_text().replace("\u22ef", "")
else:
remark = "此影片没有评价"
print(remarks)
#评分
scores = info.find_all("span", {"class": "rating_num"})
score = scores[0].get_text()
f.write(num + '、')
f.write(name + "\n")
f.write(charactor + "\n")
f.write(remark + "\n")
# f.write(score)
f.write("\n\n")
f.close() # 记得关闭文件
注意爬取元素的时候,会有非法符号(因为这些符号的存在,会影响你写入文本中),所以需要将符号用replace函数替换.
【Tips】注意写数据时将格式改为“UTF-8”,不然所写信息为乱码
3.全部代码(如下)
#coding:utf-8
from bs4 import BeautifulSoup
import requests
import os
def get_html(web_url):
header = {
"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
html = requests.get(url=web_url,headers= header).text
soup = BeautifulSoup(html,'lxml')
data = soup.find('ol').find_all('li') #截取需要的内容
return data
def get_info(all_move):
f = open("./douban.txt", "a",encoding='UTF-8')
for info in all_move:
#排名
nums = info.find('em')
num = nums.get_text()
#名字
names = info.find("span") # 名字比较简单 直接获取第一个span就是
name = names.get_text()
#导演
charactors = info.find("p") # 这段信息中有太多非法符号你需要替换掉
charactor = charactors.get_text().replace(" ", "").replace("\n", "") # 使信息排列规律
charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
"\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")
#评语
remarks = info.find_all("span", {"class": "inq"})
if remarks: # 这个判断是因为有的电影没有评语,你需要做判断
remark = remarks[0].get_text().replace("\u22ef", "")
else:
remark = "此影片没有评价"
print(remarks)
#评分
scores = info.find_all("span", {"class": "rating_num"})
score = scores[0].get_text()
f.write(num + '、')
f.write(name + "\n")
f.write(charactor + "\n")
f.write(remark + "\n")
# f.write(score)
f.write("\n\n")
f.close() # 记得关闭文件
if __name__ == "__main__":
File_Path = os.getcwd()[:-4] + 'Test\\' # 获取到当前文件的目录,并检查是否有report文件夹,如果不存在则自动新建report文件
if not os.path.exists(File_Path):
os.makedirs(File_Path)
page = 0 # 初始化页数,TOP一共有250部 每页25部
while page <= 225:
web_url = "https://movie.douban.com/top250?start=%s&filter=" % page
all_move = get_html(web_url) # 返回每一页的网页
get_info(all_move) # 匹配对应信息存入本地
page += 25
【结果展示】
参考链接:https://www.cnblogs.com/haichong/p/8067874.html
Wimb