具体步骤如下:
1、明确爬取的网址,并检查所要获取的内容是否在网页源代码中 2、加载所有的包,并尝试获取网页源代码 3、解析数据 4、开始匹配 5、将数据保存为csv格式,方便数据分析时使用
1、本此爬取的网址及想要获取的内容
网址是:https://movie.douban.com/chart 预获取的内容: 在网页上面右击——检查,发现想要的数据均可以从源代码中直接获取
2、加载所有的包,并尝试获取网页源代码
url = "https://movie.douban.com/chart"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
rep = requests.get(url,headers = headers)
print(rep.text)
成功获取,和在浏览器中查看的源代码是一致的,没有乱码
3、解析数据
欲获取的内容应该有一致的结构,里面不同的内容但是我们不需要的可以使用.*? 过滤掉, 想要的内容使用(?P<name>.*?) ,其中<> 中的是组名,任取
obj = re.compile('<table width="100%" class="">.*?<a.*? title="(?P<name>.*?)">.*?<p class="pl">(?P<time>.*?)</p>.*?<span class="rating_nums">(?P<score>.*?)</span>.*?<span class="pl">(?P<num>.*?)</span>',re.S)
4、开始匹配(可以查看匹配结果)
result = obj.finditer(rep.text)
for i in result:
print(i.group("name"))
print(i.group("time"))
print(i.group("score"))
print(i.group("num"))
5、将数据保存为csv格式(可以将第4步省略掉)
数据保存为csv格式,方便数据分析时使用
result = obj.finditer(rep.text)
f = open("data.csv",mode = "w")
csvwriter = csv.writer(f)
for it in result:
dic = it.groupdict()
csvwriter.writerow(dic.values())
f.close()
print("success")
完整代码[可直接运行]
import requests
import re
import csv
url = "https://movie.douban.com/chart"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
rep = requests.get(url,headers = headers)
obj = re.compile('<table width="100%" class="">.*?<a.*? title="(?P<name>.*?)">.*?<p class="pl">(?P<time>.*?)</p>.*?<span class="rating_nums">(?P<score>.*?)</span>.*?<span class="pl">(?P<num>.*?)</span>',re.S)
result = obj.finditer(rep.text)
f = open("data.csv",mode = "w")
csvwriter = csv.writer(f)
for it in result:
dic = it.groupdict()
csvwriter.writerow(dic.values())
f.close()
print("success")
|