python3 爬虫---爬取豆瓣电影TOP250

第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter=

分析网址'?'符号后的参数,第一个参数'start=0',这个代表页数,‘=0’时代表第一页,‘=25’代表第二页。。。以此类推

 

一、分析网页:

明确要爬取的元素 :排名、名字、导演、评语、评分,在这里利用Chrome浏览器,查看元素的所在位置

 

每一部电影信息都在<li></li>当中

爬取元素的所在位置

分析完要爬取的元素,开始准备爬取的工作

二、爬取部分:

工具:

  Python3

  requests

  BeautifulSoup

 

1、获取每一部电影的信息

1 def get_html(web_url):  # 爬虫获取网页没啥好说的
2     header = {
3         "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"}
4     html = requests.get(url=web_url, headers=header).text#不加text返回的是response,加了返回的是字符串
5     Soup = BeautifulSoup(html, "lxml")
6     data = Soup.find("ol").find_all("li")  # 还是有一点要说,就是返回的信息最好只有你需要的那部分,所以这里进行了筛选
7     return data

requests.get()函数,会根据参数中url的链接,返回response对象

.text会将response对象转换成str类型

find_all()函数,会将html文本中的ol标签下的每一个li标签中的内容筛选出来

 

2、筛选出信息,保存进文本

 1 def get_info(all_move):
 2     f = open("F:\\Pythontest1\\douban.txt", "a")
 3 
 4     for info in all_move:
 5         #    排名
 6         nums = info.find('em')
 7         num = nums.get_text()
 8 
 9         #    名字
10         names = info.find("span")  # 名字比较简单 直接获取第一个span就是
11         name = names.get_text()
12 
13         #    导演
14         charactors = info.find("p")  # 这段信息中有太多非法符号你需要替换掉
15         charactor = charactors.get_text().replace(" ", "").replace("\n", "")  # 使信息排列规律
16         charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
17             "\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")
18 
19         #    评语
20         remarks = info.find_all("span", {"class": "inq"})
21         if remarks:  # 这个判断是因为有的电影没有评语,你需要做判断
22             remark = remarks[0].get_text().replace("\u22ef", "")
23         else:
24             remark = "此影片没有评价"
25         print(remarks)
26 
27         # 评分
28         scores = info.find_all("span", {"class": "rating_num"})
29         score = scores[0].get_text()
30 
31 
32         f.write(num + '')
33         f.write(name + "\n")
34         f.write(charactor + "\n")
35         f.write(remark + "\n")
36         f.write(score)
37         f.write("\n\n")
38 
39     f.close()  # 记得关闭文件

注意爬取元素的时候,会有非法符号(因为这些符号的存在,会影响你写入文本中),所以需要将符号用replace函数替换

其余的部分就不做解释了~~

 

3、全部代码

 1 from bs4 import BeautifulSoup
 2 import requests
 3 import os
 4 
 5 
 6 def get_html(web_url):  # 爬虫获取网页没啥好说的
 7     header = {
 8         "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"}
 9     html = requests.get(url=web_url, headers=header).text#不加text返回的是response,加了返回的是字符串
10     Soup = BeautifulSoup(html, "lxml")
11     data = Soup.find("ol").find_all("li")  # 还是有一点要说,就是返回的信息最好只有你需要的那部分,所以这里进行了筛选
12     return data
13 
14 
15 def get_info(all_move):
16     f = open("F:\\Pythontest1\\douban.txt", "a")
17 
18     for info in all_move:
19         #    排名
20         nums = info.find('em')
21         num = nums.get_text()
22 
23         #    名字
24         names = info.find("span")  # 名字比较简单 直接获取第一个span就是
25         name = names.get_text()
26 
27         #    导演
28         charactors = info.find("p")  # 这段信息中有太多非法符号你需要替换掉
29         charactor = charactors.get_text().replace(" ", "").replace("\n", "")  # 使信息排列规律
30         charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
31             "\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")
32 
33         #    评语
34         remarks = info.find_all("span", {"class": "inq"})
35         if remarks:  # 这个判断是因为有的电影没有评语,你需要做判断
36             remark = remarks[0].get_text().replace("\u22ef", "")
37         else:
38             remark = "此影片没有评价"
39         print(remarks)
40 
41         # 评分
42         scores = info.find_all("span", {"class": "rating_num"})
43         score = scores[0].get_text()
44 
45 
46         f.write(num + '')
47         f.write(name + "\n")
48         f.write(charactor + "\n")
49         f.write(remark + "\n")
50         f.write(score)
51         f.write("\n\n")
52 
53     f.close()  # 记得关闭文件
54 
55 
56 if __name__ == "__main__":
57     if os.path.exists("F:\\Pythontest1") == False:  # 两个if来判断是否文件路径存在 新建文件夹 删除文件
58         os.mkdir("F:\\Pythontest1")
59     if os.path.exists("F:\\Pythontest1\\douban.txt") == True:
60         os.remove("F:\\Pythontest1\\douban.txt")
61 
62     page = 0  # 初始化页数,TOP一共有250部   每页25部
63     while page <= 225:
64         web_url = "https://movie.douban.com/top250?start=%s&filter=" % page
65         all_move = get_html(web_url)  # 返回每一页的网页
66         get_info(all_move)  # 匹配对应信息存入本地
67         page += 25

 

posted @ 2017-12-20 16:33  神薯片  阅读(8877)  评论(0编辑  收藏  举报