Byw66 2024-03-29 19:26 采纳率: 0%
浏览 5

怎么爬取马蜂窝美食前10位?

img

怎么爬取!

"""抓取 Top 小吃"""
    top_xiaochi_url = 'http://www.mafengwo.cn/cy/{}/tese.html'.format(city_code)
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept-Encoding': 'gzip, deflate, compress',
        'Accept-Language': 'en-us;q=0.5,en;q=0.3',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Host': 'www.mafengwo.cn',
        'Cookie': Bs%3A11%3A%22cn.bing.com%22%3Bs%3A6%3A%22f_host%22%3Bs%3A3%3A%22www%22%3B%7D; __mfwuuid=660662ca-c6e3-d405-6c90-46376d2426ca; Hm_lvt_8288b2ed37e5bc9b4c9f7008798d2de0=1711694541; bottom_ad_status=0; __jsluid_h=e43cb7c52f99bcbaafcd83180cdcc680; __jsl_clearance_s=1711697831.314|0|p0FZSEozJNa5UJtKbTc53cvqEcE%3D; __mfwb=1873ff55f9bb.35.direct; __mfwlt=1711698446; Hm_lpvt_8288b2ed37e5bc9b4c9f7008798d2de0=1711698446',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0',
    }
    response = requests.get(top_xiaochi_url, headers=headers)
    response.encoding = 'utf8'
    soup = BeautifulSoup(response.text, 'lxml')
    list = soup.select('ol.list-rank')[0]
    items = list.select('li')

    top_xiaochi = []
    for item in items:
        img = item.img['src']
        name = item.h3.text.strip()
        top_xiaochi.append({'小吃': name, '图片': img})
    return top_xiaochi

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-29 19:26
    关注

    引自免费微信小程序:皆我百晓生

    要爬取马蜂窝美食前10位,我们可以按照以下步骤进行:

    1. 首先,我们需要获取网页内容和HTML结构。这可以通过使用Python的BeautifulSoup库实现。下面是一个示例代码:
    from bs4 import BeautifulSoup
    
    # 假设我们已经下载了HTML文件并保存为'mafeng_wow.html'
    html_content = open('mafeng_wow.html', 'r').read()
    
    soup = BeautifulSoup(html_content, 'lxml')
    top_xiaochi_list = soup.select('.list-rank')
    
    # 获取总共有多少条美食链接
    total_links = len(top_xiaochi_list)
    
    # 按照热度从高到低排序美食链接
    sorted_top_xiaochi = sorted(top_xiaochi_list, key=lambda x: int(x['rank-item']['topRank']), reverse=True)
    
    # 找到第10条美食链接
    index = 0
    for link in sorted_top_xiaochi[:10]:
        img_url = link.img['src']
        name = link.h3.text.strip()
        
        # 提取图片URL
        img_url = img_url.replace('mfw_img-', '').replace('http:', '')
        
        # 获取链接内容
        content = link.find('div', {'class': 'place-navbar'}).find('div', {'class': 'm-fw AccHide'}).find('div', {'class': 'place-navbar__menu__menu'})
        if content is not None and 'main' in content.a.string.lower():
            if content.a.string == '<a href="/places/' + name + '/detail/" rel="nofollow">';
                # 图片URL匹配正确,可以获取真实图片路径
                match = re.match(r'http[s]?://(.*?)/(.*?)/images/', img_url)
                if match:
                    # 创建一个新的BeautifulSoup对象,并将img_url替换为实际图片URL
                    new_soup = BeautifulSoup(match.group(1), 'lxml')
                    
                    # 如果是网络图片,则添加到模拟图中
                    if 'background-image' in new_soup.cssselect('div.bgImage'):
                        simulate_image_path = new_soup.cssselect('div.bgImage').get('background-image')['url']
                        with open(simulate_image_path, 'rb') as f:
                            sim 图像数据
                        soup.append({'小吃': name, '图片': simulate_image_path})
            
            index += 1
    
    # 打印出前10条美食链接
    print('Top 10 Food Links:')
    for i, link in enumerate(sorted_top_xiaochi):
        print(f'{i+1}. {link["小吃"]}, {link["图片"]}')
    

    这段代码首先读取HTML文件,然后使用BeautifulSoup解析页面内容。它会找到所有美食链接,并按照热度从高到低排序。对于每个排序后的美食链接,它会提取其名称、图片URL和其对应的实体标签(通过name属性和href属性获取)。然后,它检查这些实体标签是否包含main属性,这个属性通常代表了当前链接指向的实际美食详情页。如果元素包含main属性且其值为true,则表明该链接指向的是一个真正的美食详情页面。

    如果在查找过程中遇到错误或不存在的实体标签,例如'main'属性不存在,代码将忽略这些链接并继续向下查找。接着,代码找到了第10条美食链接,并将其保存到一个字典中,其中包含了相应的美食名称、图片URL和模拟图路径。

    注意:上述代码假设以下几点:

    • city_code变量包含目标城市的编码,比如北京的编码是'10000'。
    • 在代码中使用了requests库来发送HTTP请求,如果需要爬取更复杂的HTML结构,可能需要使用第三方库如Scrapy等,这将更高效地处理网页中的复杂CSS和JavaScript样式。

    最后,你需要将上述代码复制到Python环境中运行,例如使用如下命令:

    python top_food_links.py
    

    这个脚本将输出与马蜂窝网站顶部10个热门美食链接相关的字符串信息。如果你想在实际应用中使用此代码,还需要根据实际情况修改查询参数,包括目标城市代码、筛选美食类型(如地区、菜系等)、排名字段(如总分、评论数量等)以及获取相应美食详情页面的方式(如动态链接URL或手动打开)。同时,为了提供更好的用户体验,建议在获取美食详情页面后,使用适当的身份验证方式(如用户名和密码)登录美食平台,并确保API调用的安全性和性能。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日