找回密码
 会员注册
查看: 43|回复: 0

python—爬虫爬取电影页面实例

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71056
发表于 2024-9-5 19:34:23 | 显示全部楼层 |阅读模式
下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。首先,确保你已经安装了requests和lxml库。如果没有安装,可以通过pip安装它们:pipinstalllxml1安装好lxml库后,就可以在Python代码中通过fromlxmlimportetree来导入etree模块,并使用它提供的各种功能。然后,我们可以编写如下的爬虫脚本:importreimportfake_useragentimportrequestsfromlxmlimportetreeif__name__=='__main__':#UA伪装head={"User-Agent":fake_useragent.UserAgent().random}fp=open("./douban","w",encoding="utf8")#1.urlforiinrange(0,250,25):url="https://movie.douban.com/top250?start={i}&filter="#2.发送请求response=requests.get(url,headers=head)#3.获取想要的数据res_text=response.text#4.数据解析tree=etree.HTML(res_text)#定位所有的li标签li_list=tree.xpath("//ol[@class='grid_view']/li")forliinli_list:film_name="".join(li.xpath(".//span[@class='title'][1]/text()"))director_actor_y_country_type="".join(li.xpath(".//div[@class='bd']/p[1]/text()"))score="".join(li.xpath(".//span[@class='rating_num']/text()"))quote="".join(li.xpath(".//span[@class='inq']/text()"))new_str=director_actor_y_country_type.strip()y=re.match(r"([\s\S]+?)(\d+)(.*?)",new_str).group(2)country=new_str.rsplit("/")[-2].strip()types=new_str.rsplit("/")[-1].strip()director=re.match(r"导演[a-zA-Z\u4e00-\u9fa5·]+)(.*?)",new_str).group(1)try:actor=re.match(r"(.*?)主演[a-zA-Z\u4e00-\u9fa5·]+)(.*?)",new_str).group(2)exceptExceptionase:actor="no"fp.write(film_name+"#"+y+"#"+country+"#"+types+"#"+director+"#"+actor+"#"+score+"#"+quote+"\n")print(film_name,score,quote,y,country,types,director)fp.close()1234567891011121314151617181920212223242526272829303132333435363738394041这段代码是一个Python脚本,用于从电影Top250页面抓取电影信息,并将这些信息保存到本地文件中。下面是对代码的详细解释:1.导入必要的库:re:用于正则表达式匹配。fake_useragent:用于生成随机的User-Agent,以模拟不同的浏览器访问,避免被网站识别为爬虫。requests:用于发送HTTP请求。lxml.etree:用于解析HTML文档,提取所需信息。2.设置User-Agent:使用fake_useragent.UserAgent().random生成一个随机的User-Agent,并存储在head字典中,作为HTTP请求头的一部分。3.打开文件:使用open(“./douban”,“w”,encoding=“utf8”)以写入模式打开(或创建)一个名为douban的文件,用于存储抓取的电影信息。4.循环请求电影Top250页面:通过循环,每次请求电影Top250页面的一个子集,start参数从0开始,每次增加25,直到250(但不包括250,因为range的结束值是开区间)。5.发送HTTP请求:使用requests.get(url,headers=head)发送GET请求,请求头中包含之前设置的User-Agent。6.解析HTML文档:使用etree.HTML(res_text)将响应的文本内容解析为HTML文档。通过XPath表达式//ol[@class=‘grid_view’]/li定位所有包含电影信息的li标签。7.提取电影信息:遍历每个li标签,提取电影名称、导演/演员/年份/国家/类型、评分、简介等信息。使用正则表达式处理director_actor_y_country_type字符串,以提取年份、国家和类型。注意,这里对演员信息的提取使用了异常处理,如果正则表达式匹配失败(例如,某些电影信息中可能没有演员信息),则将演员设置为"no"。8.写入文件:将提取的电影信息拼接成字符串,并写入之前打开的文件中,每条信息占一行。9.关闭文件:循环结束后,关闭文件。这里我们截取了部分输出结果的信息,可以看到已经成功爬取电影网站中的部分信息,这个简单的爬虫示例展示了如何发送HTTP请求、解析HTML内容以及提取所需信息的基本流程。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 04:50 , Processed in 0.585747 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表