爬虫(1)-正则化表达式爬取猫眼电影排行榜前100部电影

tech2022-07-31  165

爬取猫眼电影排行榜前100部电影

文章目录

爬取猫眼电影排行榜前100部电影1.抓取首页2.正则化表达式提取信息3.保存到文件中4.抓取前100部电影

认为有用的话请点赞,码字不易,谢谢。 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/category_10354544.html

网站地址https://maoyan.com/board/4?offset=

本方法主要只用requests库对网站信息抓取。

1.抓取首页

我们将网址URL使用requests打开,获取HTML文本代码,输入自己电脑中的浏览器的代理headers。使用status_code是否等于200判断网站是否打开。最后返回html文本.

def gethtml(url): headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0'} respond=request.get(url,headers=headers) if respond.status_code==200: return respond.text return None

2.正则化表达式提取信息

我们使用compile()函数通过正则化字符串得到正则化表达式对象,然后使用findall()函数从html文本中获取我们需要的信息。 打开上面给出的网址,按F12查看HTML代码。我们发现每个电影的信息放在< dd>–</ dd>之间,所以我们的正则化表达式从< dd>开始。

def paras(html): datas=['index','image','title','actor','time','score'] pattern=re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?src="(.*?)".*?title.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S) items=re.findall(patter,html) for item in items: for i in range(5): print(datas[i]+':'+item[i].strip()) write_to_file(datas[i]+':'+item[i].strip()) print(datas[5]+':'+item[5]+item[6]) write_to_file(datas[5]+':'+item[5]+item[6])

3.保存到文件中

def write_to_file(content): with open('maoyan.txt','a',encoding='utf-8') as f: f.write(content+'\n')

4.抓取前100部电影

我们发现每页最多显示10部电影,当我们点击下一页时发现: 第一页1-10:https://maoyan.com/board/4?offset= 第二页11-20:https://maoyan.com/board/4?offset=10 第三页 21-30:https://maoyan.com/board/4?offset=20 … 区别在与网址后缀offset=0/10/20…,因此我们只需要改变offset的数值便可爬取前100部电影。

url='https://maoyan.com/board/4?offset=' for i in range(10): html=get_one(url+str(i*10)) parse_one(html)

将所有代码整合起来:

import requests,re def get_one(url): headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0'} respond=requests.get(url,headers=headers) if respond.status_code==200: return respond.text return None def parse_one(html): datas=['index','image','title','actor','time','score'] pattern=re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?src="(.*?)".*?title.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S) items=re.findall(pattern,html) for item in items: for i in range(5): if i==3: print(datas[3]+':'+item[3].strip()[3:]) write_to_file(datas[3]+':'+item[3].strip()[3:]) elif i==4: print(datas[4]+':'+item[4].strip()[5:]) write_to_file(datas[4]+':'+item[4].strip()[5:]) else: print(datas[i]+':'+item[i].strip()) print(datas[5]+':'+item[5]+item[6]) write_to_file(datas[5]+':'+item[5]+item[6]) def write_to_file(content): with open('maoyan.txt','a',encoding='utf-8') as f: f.write(content+'\n') if __name__ == "__main__": url='https://maoyan.com/board/4?offset=' for i in range(10): html=get_one(url+str(i*10)) parse_one(html)
最新回复(0)