豆瓣爬取电影top250

爬取豆瓣电影

豆瓣top250链接:https://movie.douban.com/top250
每25个一页,
第一页url:https://movie.douban.com/top250?start=0&filter=
第二页url:URL变成了https://movie.douban.com/top250?start=50&filter=
以此类推,修改url,start=0,50,100可以验证
这次爬取电影名称
复制selector
代码如下:

import requests
from bs4 import BeautifulSoup

headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.163 Chrome/80.0.3987.163 Safari/537.36',
}

def URL_list(): # 构建URL列表
    urls = []
    # 根据我们观察到的规律进行构建
    for i in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(i)+'&filter='
        urls.append(url)
    return urls

def get_data(url):
    res = requests.get(url, headers=headers) # 发出请求
    soup = BeautifulSoup(res.text, 'lxml')
    return soup

def parse_data(soup, data):
    # target = soup.select("#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-of-type(1)")
    target = soup.select("#content > div > div.article > ol > li > div > div.info > div.hd > a > span.other")
    for i in target:
        data.append(i.get_text())
    return data

def main():
    urls = URL_list()
    data = []
    for url in urls:
        soup = get_data(url) # 发起请求
        parse_data(soup, data)
    print("---- 豆瓣前250电影 ----")
    for i in range(len(data)):
        print("%6s" % (str(i+1)) + "  " + "%25s" % data[i]) #格式化输出
if __name__ == "__main__":
    main()

结果如下:结果1
re正则表达式提取电影名称、导演、年份
代码:

import re
import requests
from bs4 import BeautifulSoup

count = 1

headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.163 Chrome/80.0.3987.163 Safari/537.36',
}

def URL_list(): # 构建URL列表
    urls = []
    # 根据我们观察到的规律进行构建
    for i in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(i)+'&filter='
        urls.append(url)
    return urls

def get_data(url):
    res = requests.get(url, headers=headers) # 发出请求
    soup = BeautifulSoup(res.text, 'lxml')
    return soup

def parse_data_all(soup, data):
    global count
    # soup = BeautifulSoup(text, 'lxml')
    film_names = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-of-type(1)')
    film_data = soup.select("#content > div > div.article > ol > li > div > div.info > div.bd > p:nth-of-type(1)")
    # print(film_data)

    for (i,j) in zip(film_data, film_names):
        target = i.get_text()
        # print(target)
        director_name = re.search('导演:.*', target).group()[4:-1] # 匹配导演
        year = re.search('[0-9]{4}', target).group() # 匹配年份
        # print(j.get_text())
        film_names = j.get_text()
        # print('导演:'+director_name)
        lis = [film_names, director_name.split()[0], year]
        data[count] = lis
        # data.append(lis)
        count += 1

def print_data(data):
    for i in range(1, 251):
        print(data[i])

def main1():
    urls = URL_list()
    data = {}
    for url in urls:
        text = get_data(url)
        parse_data_all(text, data)
    print_data(data)

if __name__ == "__main__":
    main1()

结果:
结果2

### 豆瓣电影Top 250爬虫实现 以下是一个基于Python编写的豆瓣电影Top 250爬虫程序,用于抓取所有页面的电影名字及其对应的链接,并展示如何实现翻页功能。 #### 1. 导入必要的库 为了完成网页请求和HTML解析的任务,我们将使用`requests`库发送HTTP请求,以及`BeautifulSoup`库解析HTML文档。 ```python import requests from bs4 import BeautifulSoup ``` #### 2. 请求头设置 模拟浏览器行为访问目标网站,避免被服务器识别为自动化工具而拒绝服务。 ```python headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } ``` #### 3. 主函数定义 创建主函数逻辑框架,初始化存储容器并调用辅助函数执行具体任务。 ```python def main(): base_url = "https://movie.douban.com/top250?start={}&filter=" movies_list = [] for i in range(0, 250, 25): # 遍历每一页的数据 url = base_url.format(i) soup = fetch_page(url) movie_info = parse_movie(soup) movies_list.extend(movie_info) output_results(movies_list) ``` 此处设置了步长为25的循环迭代器,因为从参考资料得知每增加25代表切换至下一页[^2]。 #### 4. 页面获取函数 封装了一个专门负责发出GET请求并返回响应体的方法。 ```python def fetch_page(url): try: response = requests.get(url, headers=headers) if response.status_code == 200: return BeautifulSoup(response.text, 'html.parser') else: print(f"Failed to load {url}, status code: {response.status_code}") except Exception as e: print(e) ``` 如果状态码不是200则打印错误消息;发生异常情况同样报告出来以便调试[^1]。 #### 5. 解析单个页面中的影片信息 针对每一个列表项提取所需字段值存放到字典对象里再追加到总集合当中去。 ```python def parse_movie(soup): items = soup.find_all('div', class_='item') # 获取所有的条目节点 result = [] for item in items: title_tag = item.find('span', attrs={'class': 'title'}) link_tag = item.a name = title_tag.string.strip() if title_tag else None href = link_tag['href'] if link_tag and 'href' in link_tag.attrs else None entry = {'name': name, 'link': href} result.append(entry) return result ``` 这里定位到了包含各个项目详情的小块区域之后逐一分析其中的关键标签属性从而获得最终想要的内容[^2]。 #### 6. 输出结果 简单地遍历收集好的数据集逐行显示出来即可满足题目要求。 ```python def output_results(results): for idx, res in enumerate(results, start=1): print(f"{idx}. Name: {res['name']} | Link: {res['link']}") ``` 最后按照编号顺序依次列举出全部找到的信息供使用者查阅[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值