• 豆瓣电影top250网页爬虫


    设计思路

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

    实现过程

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

    1. from bs4 import BeautifulSoup
    2. import re # 正则表达式,进行文字匹配
    3. import urllib.request, urllib.error # 指定URL,获取网页数据
    4. import xlwt # 进行excel操作
    5. def main():
    6. baseurl = "https://movie.douban.com/top250?start="
    7. datalist = getdata(baseurl)
    8. savepath = ".\\豆瓣电影top250.xls"
    9. savedata(datalist, savepath)
    10. ##获取网页数据
    11. def getdata(baseurl):
    12. id = 0
    13. # 存储数据列表
    14. datalist = []
    15. ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页
    16. for i in range(0, 10):
    17. url = baseurl + str(i * 25)
    18. html = geturl(url)
    19. # 构建了一个BeautifulSoup类型的对象soup,是解析html的
    20. # html.parser是解析html的
    21. soup = BeautifulSoup(html, "html.parser")
    22. # 获取数据
    23. movie_items = soup.find_all("div", class_='item')
    24. for item in movie_items:
    25. id += 1
    26. # 保存HTML中一部电影的所有信息
    27. data = []
    28. # 获取文字
    29. title = item.select_one('.title').text
    30. # print(title)
    31. # 将那段文字分成列表
    32. time_data = item.select('.bd p')[0].text.split('\n')
    33. # print(time_data)
    34. # 将时间挑选出来
    35. time = time_data[2].replace(' ', '').split('/')[0]
    36. # print(time)
    37. # 将国家挑选出来
    38. country = time_data[2].replace(' ', '').split('/')[1]
    39. # print(country)
    40. # 酱想要的内容追加到数据中
    41. data.append(id)
    42. data.append(title)
    43. data.append(time)
    44. data.append(country)
    45. # 讲各部电影的信息存储在数据列表中
    46. datalist.append(data)
    47. return datalist
    48. ##保存数据
    49. def savedata(datalist, savepath):
    50. workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) ##style_compression=0不压缩
    51. worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # cell_overwrite_ok=True再次写入数据覆盖
    52. column = ("排名", "电影名", "时间", "国家") ##execl项目栏
    53. for i in range(0, 4):
    54. worksheet.write(0, i, column[i]) # 将column[i]的内容保存在第0行,第i列
    55. for i in range(0, 250):
    56. data = datalist[i]
    57. for j in range(0, 4):
    58. worksheet.write(i + 1, j, data[j])
    59. workbook.save(savepath)
    60. ##爬取网页
    61. def geturl(url):
    62. # 破解反爬虫
    63. head = {
    64. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    65. "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
    66. }
    67. req = urllib.request.Request(url, headers=head)
    68. try: ##异常检测
    69. response = urllib.request.urlopen(req)
    70. html = response.read().decode("utf-8")
    71. except urllib.error.URLError as e:
    72. if hasattr(e, "code"): ##如果错误中有这个属性的话
    73. print(e.code)
    74. if hasattr(e, "reason"):
    75. print(e.reason)
    76. return html
    77. # 提示文字并执行
    78. if __name__ == '__main__':
    79. main()
    80. print("爬取成功!!!")

  • 相关阅读:
    网络安全漏洞分析之远程代码执行
    vue三个点…运算符时报错 Syntax Error: Unexpected token
    客服都喜欢的快捷回复软件
    I Pa?sWorD(2023icpc网络预选赛)
    C语言 | Leetcode C语言题解之第329题矩阵中的最长递增路径
    第一颗国产 单/双端口 MIPI CSI/DSI 至 HDMI 1.4 发射器 芯片LT9611
    asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制
    系统架构设计师之软件概要设计
    电脑微信聊天记录监控要怎么做?找谁找?
    Go:DoublyLinkedList双链表(附完整源码)
  • 原文地址:https://blog.csdn.net/yuanmenglxb2004/article/details/139840321