爬虫小试—re,requests—豆瓣电影

爬虫小试—re,requests—豆瓣电影,第1张

爬虫小试—re,requests—豆瓣电影

目录

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 正则表达式

正则表达式 – 语法 | 菜鸟教程  ?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。就是匹配尽可能少的字符。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存