python3 爬虫---爬取豆瓣电影TOP250
2018-06-17 23:57:56来源:未知 阅读 ()
第一次爬取的网站就是豆瓣电影 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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python day2-爬虫实现github登录 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash