爬虫日常实战

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

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

方法一:

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

python 复制代码
# -- coding: utf-8 --
# 爬取内容:标题,标签,简介
import requests
import json
import jsonpath
import pprint

num = 1
headers = {
    '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',
    'cookie': '_lxsdk_cuid=192b4109d3bc8-0ab8530f770fd3-26001051-144000-192b4109d3bc8; logan_session_token=s9yzimqoliqqqa0xxruc; cookie_consent=true; _lxsdk_s=192b4109d3c-294-7f6-c00%7C%7C12'
}
while num <= 10:
    url = f'https://www.meituan.com/smart/view/news/r/tNewsService_pageGetByQuery?pageSize=10&pageNo={num}&newsClassifyId=&lanType=zh-CN'
    response = requests.get(url, headers=headers)
    dict_data = json.loads(response.content)
    # pprint.pprint(dict_data)
    titles = jsonpath.jsonpath(dict_data, '$..title')
    signs = jsonpath.jsonpath(dict_data, '$..newsClassifyName')
    contents = jsonpath.jsonpath(dict_data, '$..newsAbstract')
    comment_list = []
    for title, sign, comment in zip(titles, signs, contents):
        comment_dict = {
            "标题": title,
            "标签": sign,
            "简介": comment,
        }
        comment_list.append(comment_dict)
    print(json.dumps(comment_list, ensure_ascii=False, indent=4))
    num += 1

爬取结果:

方法二:

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

python 复制代码
# -- coding: utf-8 --
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get(
    'https://www.meituan.com/news?requestCode=b872f8728bc74f9f9c90688d88b58e1d&responseCode=ff49426a9e664f6ba92cbaa7fc9b9b08')

# 等待页面加载
time.sleep(3)
# 设置滚动和爬取参数
scroll_pause_time = 2  # 每次滚动后的等待时间
previous_height = driver.execute_script("return document.body.scrollHeight") #JavaScript 代码返回当前网页的总高度

# 循环进行滚动和数据爬取
while True:
    # 获取当前页面的元素列表
    el_list = driver.find_elements(By.XPATH, '//*[@id="__next"]/div[2]/div[2]/div/div[2]/a/div/div[1]/div')

    # 输出当前爬取的内容
    for el in el_list:
        title = el.find_element(By.XPATH, './/h2').text
        sign = el.find_element(By.XPATH, './/div[2]/span[1]/span').text
        content = el.find_element(By.XPATH, './/div[1]').text
        comment_dict = {
            "标题": title,
            "标签": sign,
            "简介": content,
        }
        print(comment_dict)  # 输出当前获取的数据

    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    time.sleep(scroll_pause_time)
    # 计算新的滚动高度
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == previous_height:
        break  # 如果没有更多内容,退出循环
    previous_height = new_height

driver.quit()

爬取结果:

相关推荐
B站计算机毕业设计之家13 小时前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
傻啦嘿哟13 小时前
用Redis实现爬虫URL去重与队列管理:从原理到实战的极简指南
数据库·redis·爬虫
雪碧聊技术13 小时前
爬虫是什么?
大数据·爬虫·python·数据分析
小白学大数据18 小时前
集成Scrapy与异步库:Scrapy+Playwright自动化爬取动态内容
运维·爬虫·scrapy·自动化
深蓝电商API20 小时前
异步爬虫的终极形态:aiohttp + asyncio 实现万级并发实践
爬虫·python·aiohttp
电商API_1800790524721 小时前
从客户需求到 API 落地:淘宝商品详情批量爬取与接口封装实践
大数据·人工智能·爬虫·数据挖掘
深蓝电商API21 小时前
爬虫性能压榨艺术:深入剖析 Scrapy 内核与中间件优化
爬虫·scrapy
傻啦嘿哟1 天前
爬虫数据去重:BloomFilter算法实现指南
爬虫·算法
Jonathan Star2 天前
网站识别爬虫(包括以浏览器插件形式运行的爬虫)主要通过分析请求特征、行为模式等差异来区分人类用户和自动化程序
运维·爬虫·自动化
深蓝电商API3 天前
从爬虫到平台:如何把你的爬虫项目做成一个技术产品?
爬虫·信息可视化·数据挖掘