豆瓣电影top250网页爬虫

设计思路

  1. 选择技术栈:确定使用Python及其相关库,如requests用于发送网络请求,获取网址,用re(正则表达式)或BeautifulSoup用于页面内容解析。
  2. 设计流程:规划爬虫的基本流程,包括发起请求、接受响应、解析内容、存储数据等环节。
  3. 模块设计:本设计用了4大模块,包括主体模块、爬取网页数据模块、获取网页数据模块以及保存数据模块。
  4. 错误处理:设计对网络请求错误(如连接超时、服务器错误等)的处理机制,确保程序的稳定

实现过程

首先打开想要爬取的网页,然后定义了存储数据的文件路径,如果这个网页不能爬取,要写一个反爬取的,通过设置请求头和合理的访问间隔来解决,在网络中找到'User-Agent'的请求头,就能破解较为简单的发爬虫机制了。然后导入相关的库,再创建了一个爬取网页数据的geturl函数,写入发爬取的请求头和使用requests库并设置合适的请求体向目标网页发送请求,在这个函数里写入错误处理的代码,如果请求过程中出现异常,会打印出错误信息并返回空值。其次,定义了获取数据的getdata函数,通过BeautifulSoup解析数据,从获取到的网页内容中提取想要的内容。然后定义一个保存数据的savedata函数,将数据保存到想要保存的地方,最后调用主体函数,完成网页爬取过程。

python 复制代码
from bs4 import BeautifulSoup
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 指定URL,获取网页数据
import xlwt  # 进行excel操作


def main():
    baseurl = "https://movie.douban.com/top250?start="
    datalist = getdata(baseurl)
    savepath = ".\\豆瓣电影top250.xls"
    savedata(datalist, savepath)





##获取网页数据
def getdata(baseurl):
    id = 0
    # 存储数据列表
    datalist = []
    ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页
    for i in range(0, 10):
        url = baseurl + str(i * 25)
        html = geturl(url)
        # 构建了一个BeautifulSoup类型的对象soup,是解析html的
        # html.parser是解析html的
        soup = BeautifulSoup(html, "html.parser")
        # 获取数据
        movie_items = soup.find_all("div", class_='item')
        for item in movie_items:
            id += 1
            # 保存HTML中一部电影的所有信息
            data = []
            # 获取文字
            title = item.select_one('.title').text
            # print(title)
            # 将那段文字分成列表
            time_data = item.select('.bd p')[0].text.split('\n')
            # print(time_data)
            # 将时间挑选出来
            time = time_data[2].replace(' ', '').split('/')[0]
            # print(time)
            # 将国家挑选出来
            country = time_data[2].replace(' ', '').split('/')[1]
            # print(country)
            # 酱想要的内容追加到数据中
            data.append(id)
            data.append(title)
            data.append(time)
            data.append(country)
            # 讲各部电影的信息存储在数据列表中
            datalist.append(data)
    return datalist


##保存数据
def savedata(datalist, savepath):
    workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)  ##style_compression=0不压缩
    worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True)  # cell_overwrite_ok=True再次写入数据覆盖
    column = ("排名", "电影名", "时间", "国家")  ##execl项目栏
    for i in range(0, 4):
        worksheet.write(0, i, column[i])  # 将column[i]的内容保存在第0行,第i列
    for i in range(0, 250):
        data = datalist[i]
        for j in range(0, 4):
            worksheet.write(i + 1, j, data[j])
    workbook.save(savepath)


##爬取网页
def geturl(url):
    # 破解反爬虫
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
    }
    req = urllib.request.Request(url, headers=head)
    try:  ##异常检测
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):  ##如果错误中有这个属性的话
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html


# 提示文字并执行
if __name__ == '__main__':
    main()
    print("爬取成功!!!")
相关推荐
泡泡以安28 分钟前
安卓高版本HTTPS抓包:终极解决方案
爬虫·https·安卓逆向·安卓抓包
博观而约取38 分钟前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector2 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
q567315232 小时前
Java Selenium反爬虫技术方案
java·爬虫·selenium
Zonda要好好学习2 小时前
Python入门Day2
开发语言·python
Vertira2 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉2 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗3 小时前
黑马python(二十四)
开发语言·python
晓13133 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr
是小王同学啊~3 小时前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain