爬取网站的步骤:

    1. 设置爬取目标(目标网站,目标数据)
    2. 分析目标网站(待爬取页面,待爬取数据)
    3. 批量下载HTML(使用requests库实现 点击requests介绍网站)
    4. 实现HTML解析,得到目标数据(BeautifulSoup库解析点击获取beautifulsoup介绍网站)
    5. 将结果数据存储

    在这里,我就爬取一下我的blog博客,来回忆熟悉一下爬虫吧

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Tue Mar 29 19:45:35 2022
    4. @author: lmj
    5. """
    6. import requests
    7. from bs4 import BeautifulSoup
    8. import pprint
    9. import json
    10. def download_all_html():
    11. # 下载所有列表页面的html,用于后续分析
    12. htmls = []
    13. for idx in range(1):
    14. url = f"https://liumengjieabc.gitee.io/page/{idx+2}/"
    15. # 请求url,请求成功是200
    16. r = requests.get(url)
    17. r.encoding = "utf-8"
    18. if r.status_code != 200:
    19. raise Exception("error")
    20. htmls.append(r.text)
    21. return htmls
    22. htmls = download_all_html()
    23. def parse_single_html(html):
    24. # 用html.parser解析单个HTML,得到数据
    25. soup = BeautifulSoup(html,'html.parser')
    26. articles = soup.find_all("div",class_="recent-post-item")
    27. datas = []
    28. for article in articles:
    29. # 查找超链接
    30. title_node = (
    31. article
    32. # .find("h2",class_="entry-title")
    33. # .find("a")
    34. .find("div",class_="recent-post-info")
    35. .find("a")
    36. )
    37. # 获取title_node超链接的标题
    38. title = title_node.get_text()
    39. # 获取title_node超链接的url
    40. link = title_node["href"]
    41. datas.append(
    42. # 整理成字典
    43. {"title":title,"link":'https://liumengjieabc.gitee.io/' + link}
    44. )
    45. return datas;
    46. # 执行所有的HTML页面的解析
    47. all_datas =[]
    48. for html in htmls:
    49. all_datas.extend(parse_single_html(html))
    50. print(all_datas)
    51. filename='blog.json'
    52. with open(filename,'w') as file_obj:
    53. json.dump(all_datas,file_obj)
    54. print("写入成功")

    image.png
    image.png
    先用我的博客实验了一下,成功!

    上传的作业,爬一个网页的新闻列表,emmm,现在才完成,虽迟但到!

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Tue Mar 29 19:45:35 2022
    4. @author: lmj
    5. """
    6. import requests
    7. from bs4 import BeautifulSoup
    8. import pprint
    9. import json
    10. def download_all_html():
    11. # 下载所有列表页面的html,用于后续分析
    12. htmls = []
    13. for idx in range(10):
    14. url = f"https://sites.lynu.edu.cn/xxjsxy/xyxw/{idx+1}.htm"
    15. print(url)
    16. # 请求url,请求成功是200
    17. r = requests.get(url)
    18. r.encoding = "utf-8"
    19. if r.status_code != 200:
    20. raise Exception("error")
    21. htmls.append(r.text)
    22. return htmls
    23. htmls = download_all_html()
    24. def parse_single_html(html):
    25. # 用html.parser解析单个HTML,得到数据
    26. soup = BeautifulSoup(html,'html.parser')
    27. articles = soup.find_all("ul",class_="article_list")
    28. datas = []
    29. for article in articles:
    30. items = article.find_all("li")
    31. for item in items:
    32. title_node = (
    33. item
    34. .find("a")
    35. )
    36. # 获取title_node超链接的标题
    37. title = title_node.get_text()
    38. # 获取title_node超链接的url
    39. link = title_node["href"]
    40. datas.append(
    41. # 整理成字典
    42. {"title":title,"link": link}
    43. )
    44. return datas;
    45. # 执行所有的HTML页面的解析
    46. all_datas =[]
    47. for html in htmls:
    48. all_datas.extend(parse_single_html(html))
    49. print(all_datas)
    50. filename='blog.json'
    51. with open(filename,'w') as file_obj:
    52. # json.dump(all_datas,file_obj)
    53. file_obj.write(str(all_datas))
    54. print("写入成功")

    在爬取这个网页的时候由于我页面格式没有分析好,所以导致我中间出错,等以后写爬虫的时候一定要注意这些细节的问题。

    看结果,哇塞,爬了十页呀
    image.png