一个价值一千五的外包项目!抓取大众点评的店铺信息!

2023-11-14

前言

今天在群里有人派外包的其中一个是抓取大众点评的店铺信息,价格一千五,三天内完成!很多刚学编程的小伙伴,应该觉得这个一千五也太容易拿了,相对于大众点评这个网站,其实不是像爬小说,爬表情包那样容易的,大众点评这个网站它是有反爬的!其实也就两个点!

1.正则表达式撰写

2.破解字体反爬

这个网站难一点的就这两个地方!其他都和爬其他网站的思路基本差不多,如果有新手小伙伴的,那今天就跟小编一起来完成这个1500块钱的外包项目吧!

正文

需要安装的库:

import urllib.request
from bs4 import BeautifulSoup
import re
from fontTools.ttLib import TTFont
import xlwt

过程中使用的部分软件:

  • 正则表达式测试器

  • fontcreator

  • 合适的OCR软件

记录操作步骤及代码如下所示:

1. 网页解析

1.1 爬取数据解析

选择餐饮店铺数量较多的上海万象城店,搜索结果界面如下:

  • 每页显示15条数据,共10页内容

  • 每条店铺信息包含内容如下:

店铺名称

是否提供团购/为分店/广告

星级、评分、评价人数、人均价格

口味、环境、服务

菜品种类、地址分区、详细地址

推荐菜

团购信息、优惠信息

1.2 网址解析

首页URL地址:http://www.dianping.com/search/keyword/1/10_%E4%B8%87%E8%B1%A1%E5%9F%8E](http://www.dianping.com/search/keyword/1/10_万象城)

第二页URL地址:http://www.dianping.com/search/keyword/1/10_%E4%B8%87%E8%B1%A1%E5%9F%8E/p2](http://www.dianping.com/search/keyword/1/10_万象城/p2)

第三页URL地址:http://www.dianping.com/search/keyword/1/10_%E4%B8%87%E8%B1%A1%E5%9F%8E/p3

建立循环:

for i in range(1,11)
baseURL = 'http://www.dianping.com/search/keyword/1/10_%E4%B8%87%E8%B1%A1%E5%9F%8E/p'
URL = baseURL + str(i)

1.3 登陆处理

大众点评的网页翻页需要登陆。这里采用手机验证码的方式登陆,使用开发者工具提取cookie、User-Agent,打包为headers。

1.4 定义爬取函数askURL

def askURL(URL):
   head = {"User-Agent": "", “cookie": ""}#保密原因,省略使用的User-Agent与Cookie
   request = urllib.request.Request(URL, headers=head)
   html = ""
   html = urllib.request.urlopen(request).read().decode('utf-8') #使用UTF-8解码
   return (html)

2. 数据爬取与提取

2.1 数据爬取

循环调用askURL函数,爬取每页信息,储存在字符串变量html中

def getData(baseURL):
   for i in range(1,10):
       URL = baseURL + str(i)
       html = askURL(URL)#html是askURL的返回结果,循环下的html记录单页的爬取结果,因此数据解析提取也需要在循环内进行

使用开发者工具读取源码,可以看到全部的店铺信息储存在ID为shop-list-all-list的div标签中,每个li标签为一条店铺记录。其中pic分类记录缩略图、txt分类记录店铺信息,svr-info记录团购信息

2.2 使用BeautifulSoup

方案1:提取多个标签,手动合并

       soup = BeautifulSoup(html, "html.parser")
       soupfind = soup.find_all('div', { 'class' :{"pic" , "txt" , "svr-info"}})#提取多个标签下信息时的处理方式,会提取为3个列表,需要手动合并为一个
       #仅提取单个标签时的写法
       # soupfind = soup.find_all('div', class_ :"txt" )
       
       #合并过程(仅供参考)
       soup_find = []
       i = 0
       while i < len(soupfind):
           l = ""
           l = str(soupfind[i]) + str(soupfind[i+1]) + str(soupfind[i+2])
           soup_find.append(l)
           i += 3

但后续操作中发现,部分店铺不含团购信息,导致”svr-info“class下面为空值,每三个合并出现错误

方案2:由于每个店铺的全部信息含在一个<li>标签下

def getData(baseURL):
   for i in range(1, 11):
       URL = baseURL + str(i)
       html = askURL(URL)
       soup = BeautifulSoup(html, "h
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个价值一千五的外包项目!抓取大众点评的店铺信息! 的相关文章

  • 在 Python 3.6 中,为什么负数的分数次方在 numpy 数组中返回 nan?

    我最近开始学习Python 并且经历了NumPy 官方快速入门指南 https docs scipy org doc numpy dev user quickstart html indexing slicing and iterating
  • python的_random是什么?

    如果你打开random py看看它是如何工作的 它的类Random子类 random Random import random class Random random Random Random number generator base
  • 从终端调用时 uvicorn 不工作

    我尝试通过 pip3 在系统上安装 uvicorn 这有效 但是我无法从命令行运行相同的命令 有关如何解决此问题的任何指示 Requirement already satisfied uvicorn in home vhawk19 loca
  • Python 按文件夹模块导入

    我有一个目录结构 example py templates init py a py b py a py and b py只有一个类 名称与文件相同 因为它们是猎豹模板 纯粹出于风格原因 我希望能够在中导入和使用这些类example py像
  • 地图与星图的性能?

    我试图对两个序列进行纯Python 没有外部依赖 逐元素比较 我的第一个解决方案是 list map operator eq seq1 seq2 然后我发现starmap函数来自itertools 这看起来和我很相似 但事实证明 在最坏的情
  • Accel 无法在 gedit 3 插件中工作

    我试图为 Gedit 3 编写一个使用 GObject 自省的小插件 下面显示的代码的相关部分只是为了建立一个环境 然后我可以将函数放入按钮的回调中 但是 该按钮的加速器不起作用 这段代码有什么问题 我正在使用教程here http www
  • 肥皂服务的良好框架是什么?

    我正在寻找一个用于肥皂的好框架service 我更喜欢使用Pythonic框架 但是在查看了soaplib rpclib 太不稳定 SOAPy 不适用于2 7 和ZSI 太 令人困惑 之后 我不确定这是否可能 我对使用另一种语言感到满意 尽
  • 将列表传递给 PyCrypto 中的 AES 密钥生成器

    我尝试使用 Pycrypto 生成 AES 密钥 但收到以下错误 类型错误 列表 不支持缓冲区接口 对于以下声明 aescipher AES new mykey AES MODE ECB mykey 属于类型list并包含 18854347
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • PyPI 项目页面中的“Py 版本”是什么意思?这有关系吗?

    我注意到 大多数在 PyPI 上发布的项目在其项目页面中都包含 Py 版本 元数据 但它们的值各不相同 如果包不是通用包或不是纯 python 包 那么它们的值是不同的 这是可以理解的 以便表示它们的目标平台 例如鼻页 https pypi
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 将数据框列打包到 pandas 中列出

    我需要将 pandas DataFrame 列打包到包含列表的一列中 例子 For gt gt gt df a b c 0 81 88 1 1 42 7 23 2 8 37 63 3 18 22 20 制作列表栏 list col 0 81
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 在Python中引用不带换行符的长字符串

    我正在尝试在 Python 中编写一个长字符串 该字符串显示为 OptParser 选项的帮助项 在我的源代码 py 文件中 我想放置换行符 以便我的代码不会花费新行 但是 我不希望这些换行符影响代码运行时该字符串的显示方式 例如 我想写
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出
  • 将 pandas 数据框中的多列更改为日期时间

    我有一个 13 列和 55 000 行的数据框 我正在尝试将其中 5 行转换为日期时间 现在它们返回类型 对象 我需要转换这些数据以进行机器学习 我知道如果我这样做 data birth date pd to datetime data b

随机推荐

  • matplotlib怎么在一张图上画多条曲线?

    问题 多个plot画不到一张图上 解决方法 多个plot用一个plt show 即可 一次plt show 就会有一次输出 如何让函数画在同一张画布上 for i in range 1 15 3 train score test score
  • bh1750c语言程序,BH1750FVI数字光线强度传感器 51单片机源程序

    BH1750FVI IIC测试程序 使用单片机STC89C51 晶振 11 0592M 显示 LCD1602 编译环境 Keil uVision2 参考宏晶网站24c04通信程序 时间 2011年4月20日 include include
  • vue3表格导出excel

    下载依赖 npm install xlsx 引入依赖 import as XLSX from xlsx 使用
  • Python内置类型转换函数

    chr i chr 函数返回ASCII码对应的字符串 gt gt gt print chr 65 A gt gt gt print chr 66 B gt gt gt print chr 65 chr 66 AB complex real
  • stm32f103zet6移植标准库的sdio驱动

    sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现 但一是文件结构有点复杂 二是相比于国内正点原子和野火的板子也有点不同 因此还是需要移植下才能使用 当然也可以直接使用正点原子或野火提供的实例 但为了熟悉下sdio
  • C#委托、C++委托实现、C回调函数

    C 委托 C 中的委托 Delegate 定义了方法的类型 使得可以将方法当作另一个方法的参数来进行传递 这种将方法动态地赋给参数的做法 可以避免在程序中大量使用if else switch 语句 同时使得程序具有更好的可扩展性 委托特别用
  • 从NSGA到 NSGA II

    NSGA 非支配排序遗传算法 NSGAII 带精英策略的非支配排序的遗传算法 都是基于遗传算法的多目标优化算法 都是基于pareto最优解讨论的多目标优化 遗传算法已经做过笔记 下面介绍pareto 帕累托 最优解的相关概念 本文是基于参考
  • Qt实现俄罗斯方块

    在经过基础内容的学习和简单的小示例练习后 这节我们用Qt做个俄罗斯方块小游戏 本文会描述实现俄罗斯方块的部分思路 代码开源 详细可见代码 链接获取方式 开源代码已上传gitee 关注 程序媛讲QT 公众号 回复 俄罗斯方块 获取链接 俄罗斯
  • 三分钟理解Java中字符串(String)的存储和赋值原理

    可能很多Java的初学者对String的存储和赋值有迷惑 以下是一个很简单的测试用例 你只需要花几分钟时间便可理解 1 在看例子之前 确保你理解以下几个术语 栈 由JVM分配区域 用于保存线程执行的动作和数据引用 栈是一个运行的单位 Jav
  • react中的export什么函数能导出_esModuleInterop 到底做了什么?

    问题引入 很多 react 使用者在从 JS 迁移到 TS 时 可能会遇到这样一个问题 JS 引入 react 是这样的 js import React from react 而 TS 却是这样的 ts import as React fr
  • 个人号微信二次开发,微信ipad协议

    E云是什么 E云API 是一套完整的的微信第三方服务平台 包含个微API服务与企微API服务模块 本文档主要讲述个微API服务相关 以下简称API 它能处理用户微信中的各种事件 并辅助微信执行各种操作 提供了开发者与个人号对接的能力 技术上
  • 黑盒测试用例设计方法--场景法

    8 场景法 8 1定义 场景法是通过运用场景来对系统的功能点或业务流程的描述 从而提高测试效果的一种方法 场景法一般包含基本流和备用流 从一个流程开始 通过描述经过的路径来确定的过程 经过遍历所有的基本流和备用流来完成整个场景 场景主要包括
  • 使用Xshell连接Ubuntu

    1 6 1 使用Xshell连接Ubuntu 使用命令ifconfig查看虚拟机IP地址 如图1 xx所示 图1 xx 使用如下命令安装ssh 以让Xshell软件远程连接到Ubuntu系统中 sudo apt get install op
  • CSS行高(line-height)使文本垂直居中详解

    一 场景重现 在我们的静态页面设计中 在我们的块级元素中写入文字时 div class center 我想在中间 div center height 50px background color 008c8c 会发现我们最后在网页显示的效果为
  • PCB电路板上各种标志的含义

    目录 一 PCB电路板上各种标志的含义 1 防静电标志 2 WEEE标志 3 国内认证 4 全球认证 5 北美认证 6 欧盟认证 7 韩国认证 8 日本认证 9 澳大利亚认证 一 PCB电路板上各种标志的含义 链接 PCB电路板上各种标志的
  • vue3中使用百度地图BMAP

    在Vue3中使用百度地图 可以按照以下步骤进行 1 在项目中引入百度地图的API文件 可以在public index html文件中添加以下代码 其中 密钥可以在百度地图开放平台申请 2 在需要使用地图的组件中引入BMap对象和BMapGL
  • Prompt GPT推荐社区

    大家好 我是荷逸 这次给大家带来的是我日常学习Prompt社区推荐 Snack Prompt 访问地址 http snackprompt com Snack Prompt是一个采用的Prompts诱导填空式的社区 它提供了一种简单的prom
  • vpdn-l2tp(cisco)

    ra config interface serial 1 0 config if ip add 173 16 1 1 255 255 255 252 config if no sh config if exit config vpdn en
  • java中常用的队列

    一 java中的队列 Queue 基本上 一个队列就是一个先入先出 FIFO 的数据结构 Queue接口与List Set同一级别 都是继承了Collection接口 LinkedList实现了Deque接口 二 非阻塞队列 非阻塞队列不能
  • 一个价值一千五的外包项目!抓取大众点评的店铺信息!

    前言 今天在群里有人派外包的其中一个是抓取大众点评的店铺信息 价格一千五 三天内完成 很多刚学编程的小伙伴 应该觉得这个一千五也太容易拿了 相对于大众点评这个网站 其实不是像爬小说 爬表情包那样容易的 大众点评这个网站它是有反爬的 其实也就