• 爬虫日常实战


    爬取美团新闻信息,此处采用两种方法实现:

    注意点:因为此处的数据都是动态数据,所以一定要考虑好向下滑动数据包会更新的情况,不然就只能读取当前页即第一页数据,方法一通过更新ajax数据包网址页数,方法二通过计算网页高度滚动到底部实现持续向下滑动过程。

    方法一: 

    使用寻找包含数据的ajax请求(json数据)的数据包,通过jsonpath定位提取出想要的数据: 

    1. # -- coding: utf-8 --
    2. # 爬取内容:标题,标签,简介
    3. import requests
    4. import json
    5. import jsonpath
    6. import pprint
    7. num = 1
    8. headers = {
    9. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
    10. 'cookie': '_lxsdk_cuid=192b4109d3bc8-0ab8530f770fd3-26001051-144000-192b4109d3bc8; logan_session_token=s9yzimqoliqqqa0xxruc; cookie_consent=true; _lxsdk_s=192b4109d3c-294-7f6-c00%7C%7C12'
    11. }
    12. while num <= 10:
    13. url = f'https://www.meituan.com/smart/view/news/r/tNewsService_pageGetByQuery?pageSize=10&pageNo={num}&newsClassifyId=&lanType=zh-CN'
    14. response = requests.get(url, headers=headers)
    15. dict_data = json.loads(response.content)
    16. # pprint.pprint(dict_data)
    17. titles = jsonpath.jsonpath(dict_data, '$..title')
    18. signs = jsonpath.jsonpath(dict_data, '$..newsClassifyName')
    19. contents = jsonpath.jsonpath(dict_data, '$..newsAbstract')
    20. comment_list = []
    21. for title, sign, comment in zip(titles, signs, contents):
    22. comment_dict = {
    23. "标题": title,
    24. "标签": sign,
    25. "简介": comment,
    26. }
    27. comment_list.append(comment_dict)
    28. print(json.dumps(comment_list, ensure_ascii=False, indent=4))
    29. num += 1

    爬取结果:

     

    方法二:

    使用selenium进行自动化操作,通过xpath定位数据实现对数据的提取:

    1. # -- coding: utf-8 --
    2. from selenium import webdriver
    3. from selenium.webdriver.common.by import By
    4. import time
    5. driver = webdriver.Chrome()
    6. driver.get(
    7. 'https://www.meituan.com/news?requestCode=b872f8728bc74f9f9c90688d88b58e1d&responseCode=ff49426a9e664f6ba92cbaa7fc9b9b08')
    8. # 等待页面加载
    9. time.sleep(3)
    10. # 设置滚动和爬取参数
    11. scroll_pause_time = 2 # 每次滚动后的等待时间
    12. previous_height = driver.execute_script("return document.body.scrollHeight") #JavaScript 代码返回当前网页的总高度
    13. # 循环进行滚动和数据爬取
    14. while True:
    15. # 获取当前页面的元素列表
    16. el_list = driver.find_elements(By.XPATH, '//*[@id="__next"]/div[2]/div[2]/div/div[2]/a/div/div[1]/div')
    17. # 输出当前爬取的内容
    18. for el in el_list:
    19. title = el.find_element(By.XPATH, './/h2').text
    20. sign = el.find_element(By.XPATH, './/div[2]/span[1]/span').text
    21. content = el.find_element(By.XPATH, './/div[1]').text
    22. comment_dict = {
    23. "标题": title,
    24. "标签": sign,
    25. "简介": content,
    26. }
    27. print(comment_dict) # 输出当前获取的数据
    28. # 滚动到页面底部
    29. driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    30. # 等待新内容加载
    31. time.sleep(scroll_pause_time)
    32. # 计算新的滚动高度
    33. new_height = driver.execute_script("return document.body.scrollHeight")
    34. if new_height == previous_height:
    35. break # 如果没有更多内容,退出循环
    36. previous_height = new_height
    37. driver.quit()

    爬取结果:

  • 相关阅读:
    opencv python debug记录
    基于arm-linux-gcc版本,音乐视频播放器mplayer
    多门店座号扫码点餐先付后餐公众号小程序开源版开发
    Jmeter —— jmeter接口自动化测试操作流程
    PostgreSQL数据库----pgAdmin客户端工具的使用
    前端文件word Excel pdf PPT预览
    notepad++打开文本文件乱码的解决办法
    Go语言快速入门篇(六):标识符
    2023.09.09青少年软件编程(Python)等级考试试卷(一级)
    Django ORM查询之聚合函数、聚合查询(aggregate)、分组查询(annotate)
  • 原文地址:https://blog.csdn.net/2301_77869606/article/details/143168201