目录
A 准备工作
B 编写代码
a 遇到的问题与总结
b (?P.*?)
c newline = '',a+
d 正则表达式
哈喽,打卡记录一下,今天练习的是用re,requests模块儿来获取豆瓣Top250的部分数据。
先打开我们好朋友--豆瓣的网址豆瓣电影 Top 250
A 准备工作
打开网址后,右键鼠标来查看源代码。(看网页源码更清楚些)
进入网页源码后,ctr+f后再输入框里输入内容,来快速定位。
再因为我们是要获取榜单的多页数据,所有要看看每页的URL有什么闺女。
# https://movie.douban.com/top250?start=0&filter= 1 # https://movie.douban.com/top250?start=25&filter= 2 # https://movie.douban.com/top250?start=50&filter= 3 # (page - 1) * 25 # 每一页的网页 # 'https://movie.douban.com/top250?start=' + str((page - 1) * 25)
好了,现在就开始代码部分了。
B 编写代码
"""
2022年
CSDN:抄代码抄错的小牛马
"""
# https://movie.douban.com/top250?start=0&filter= 1
# https://movie.douban.com/top250?start=25&filter= 2
# https://movie.douban.com/top250?start=50&filter= 3
# (page - 1) * 25
# 每一页的网页
# 'https://movie.douban.com/top250?start=' + str((page - 1) * 25)
# 需求:收集豆瓣电影榜单前十页的部分数据
import csv
import re
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
def get_url(page):
url = 'https://movie.douban.com/top250?start=' + str((page - 1) * 25)
response = requests.get(url=url, headers=headers)
content = response.text
return content
def get_shuju(content):
# 正则解析
obj = re.compile(r'.*?.*?(?P.*?)'
r'.*?(?P.*?)
'
r'.*?/ (?P.*?)
', re.S)
# 开始匹配数据
shuju = obj.finditer(content, page)
# newline = '',这里是防止空行写入
f = open('douban.csv', mode='a+', encoding='utf-8', newline='') # 这里模式改为 a+ ,因为 w ,在写入时会覆盖之前的数据
writer = csv.writer(f)
for i in shuju:
# name = i.group('name')
# people = i.group('people').strip().replace(' ', '').replace(';', '')
# juqing = i.group('juqing').strip().replace(' ', '').replace(';', '')
dic = i.groupdict()
dic['people'] = dic['people'].strip().replace(' ', '').replace(';', '')
dic['juqing'] = dic['juqing'].strip().replace(' ', '').replace(';', '')
writer.writerow(dic.values())
f.close()
if __name__ == '__main__':
stat_page = (int(input("请输入起始页码:")))
end_page = (int(input("请输入结束页码:")))
for page in range(stat_page, end_page + 1):
# 获取网页的源码(响应数据) response
content = get_url(page)
# 解析网页,获取数据
get_shuju(content)
运行查看:
a 遇到的问题与总结
b (?P.*?)
不知问题,我打不出来这(?P.*?)个,自定义的name,一直提示<>没闭合,最后在网上复制的(?P.*?)放进去就能行了。嘿嘿嘿~~
c newline = '',a+
CSV以逗号 , 来分隔数据newline可以取的值有None, n, r, ”, ‘rn’, newline = ''解决CSV的数据空一行
Python 操作 csv文件笔记_xiaoyu_wu的博客-CSDN博客
Python文件操作,with open as追加文本内容实例_天山懒人-CSDN博客_python 文件追加
d 正则表达式
正则表达式 – 语法 | 菜鸟教程 ?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。就是匹配尽可能少的字符。
不知问题,我打不出来这(?P
c newline = '',a+
CSV以逗号 , 来分隔数据newline可以取的值有None, n, r, ”, ‘rn’, newline = ''解决CSV的数据空一行
Python 操作 csv文件笔记_xiaoyu_wu的博客-CSDN博客
Python文件操作,with open as追加文本内容实例_天山懒人-CSDN博客_python 文件追加
d 正则表达式
正则表达式 – 语法 | 菜鸟教程 ?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。就是匹配尽可能少的字符。



