一、打开网页找到url
二、查看数据是否存在于网页源代码中
三、编写代码获取网页源代码
1、获取电影名称
注意正则表达式的使用,先观察网页源代码,我们发现每一部电影的数据存放在一个<li></li>中,如上图。并且我们要获取的电影名前后的标签和下面一行的标签相同,如果我们直接使用电影名前后的标签来筛选数据,会出现下面情况:
因此我们需要找到其它的方法区别这两个位置:
re.compile(r'<li>.*?<div class="item">.*?<span class="title">.*?</span>', re.S)
这时候我们发现没有了刚才的字母,但是出现了其它的内容,这时候我们需要在电影名的位置加上(),并在()中写?P<>,<>中给该位置的数据取一个名字,这就表示只要这个数据:如下第三个.*?
re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<movide>.*?)</span>',re.S)
2、按照同样的方法获取想要的内容
这里获取:电影名,时间,国家,评分,评价人数,短评
爬取的结果:
添加代码,将数据保存到csv文件中:
3、获取新的内容
点击第二页:获取新的url
成功获取新内容:
4、网页url麻烦,直接修改代码
代码:
import requests
import re
import csv
"""
爬取豆瓣电影TOP250
"""# 网页的url
url = "https://movie.douban.com/top250"
params = {"start": 50,"filter": ""
}
# 响应头,模拟浏览器
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
# 发送请求
response = requests.get(url, params=params,headers=headers)
# 获取网页的html
html = response.text
# 利用正则表达式提取数据
pattern = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<movide>.*?)</span>.*?'r'...<br>(?P<time>.*?) / (?P<guojia>.*?) .*?property="v:average">'r'(?P<sorce>.*?)</span>.*?<span>(?P<number>.*?)人评价.*?'r'<span class="inq">(?P<sixian>.*?)</span>', re.S)# pattern = re.compile(r'<span class="title">(?P<movide>.*?)</span>', re.S)
results = re.finditer(pattern, html)
f = open("dbTop250.csv", "w", encoding="utf-8")
writer = csv.writer(f)for result in results:print(result.group("movide").strip())print(result.group("time").strip())print(result.group("guojia").strip())print(result.group("sorce").strip())print(result.group("number").strip())print(result.group("sixian").strip())#print(result.group())dict = result.groupdict()dict['time'] = dict['time'].strip()writer.writerow(dict.values())