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

打印 上一主题 下一主题

主题 571|帖子 571|积分 1713

下面是一个简朴的爬虫实例,利用Python的requests库来发送HTTP请求,并利用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。
首先,确保你已经安装了requests和lxml库。假如没有安装,可以通过pip安装它们:
  1. pip install lxml
复制代码
安装好lxml库后,就可以在Python代码中通过from lxml import etree来导入etree模块,并利用它提供的各种功能。
然后,我们可以编写如下的爬虫脚本:
  1. import re
  2. import fake_useragent
  3. import requests
  4. from lxml import etree
  5. if __name__ == '__main__':
  6.     # UA伪装
  7.     head = {
  8.         "User-Agent": fake_useragent.UserAgent().random
  9.     }
  10.     fp = open("./douban", "w", encoding="utf8")
  11.     # 1.url
  12.     for i in range(0,250,25):
  13.         url = "https://movie.douban.com/top250?start={i}&filter="
  14.         # 2.发送请求
  15.         response = requests.get(url, headers=head)
  16.         # 3.获取想要的数据
  17.         res_text = response.text
  18.         # 4.数据解析
  19.         tree = etree.HTML(res_text)
  20.         # 定位所有的li标签
  21.         li_list = tree.xpath("//ol[@class='grid_view']/li")
  22.         for li in li_list:
  23.             film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))
  24.             director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
  25.             score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
  26.             quote = "".join(li.xpath(".//span[@class='inq']/text()"))
  27.             new_str = director_actor_y_country_type.strip()
  28.             y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)
  29.             country = new_str.rsplit("/")[-2].strip()
  30.             types = new_str.rsplit("/")[-1].strip()
  31.             director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(1)
  32.             try:
  33.                 actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
  34.             except Exception as e:
  35.                 actor = "no"
  36.             fp.write(film_name + "#" + y + "#" + country + "#" + types + "#" + director + "#" + actor + "#" + score + "#" + quote + "\n")
  37.             print(film_name, score, quote, y, country, types, director)
  38.     fp.close()
复制代码
这段代码是一个Python脚本,用于从豆瓣电影Top 250页面抓取电影信息,并将这些信息保存到本地文件中。下面是对代码的详细解释:
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.循环请求豆瓣电影Top 250页面:

通过循环,每次请求豆瓣电影Top 250页面的一个子集,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内容以及提取所需信息的基本流程。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

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