在之前的文章中,我们详细介绍了反爬虫机制与反爬虫技术及应用。其中,页面登录除了使用Selenium自动化外,还可以直接使用Cookie。下面将以大众点评(美团)美食类店铺信息爬取为例介绍
1、数据来源
大众点评网:https://www.dianping.com/
数据来源:大众点评沈阳美食热门商区智能排序店铺信息(可自定义地区及分类维度)
在该页面下面可以看到,店铺数据是分页显示的
如果点击某个店铺,将会跳转到该店铺对应的详情页
2、爬取目标
本次我们爬取的目标包括:
- 城市:沈阳(可选)
- 一级分类:美食(可选)
- 二级分类:不限(默认)
- 地点:热门商区(默认)
- 排序:智能(默认)
- 店铺信息页(全部属性):https://www.dianping.com/shenyang/ch10
- 店铺详情页(全部属性):https://www.dianping.com/shop/H8lgCIV1v61ophNd(以第一个店铺为例)
3、网页分析
经过分析,我们发现,数据形式为HTML,其中,店铺信息页数据主要嵌入在ul-li
标签中
点击其它页面,观察浏览器地址栏URL显示:
- 第一页:https://www.dianping.com/shenyang/ch10/p1
- 第二页:https://www.dianping.com/shenyang/ch10/p2
- 第三页:https://www.dianping.com/shenyang/ch10/p3
- 第N页:… …
由此可得,爬取店铺信息前10页数据的URL如下:
# 爬取前10页
urls = [f'https://www.dianping.com/shenyang/ch10/p{
str(i+1)}' for i in range(10)]
点击第一个店铺,跳转到店铺详情页,店铺详情数据则位于某个div
模块中
店铺详情页对应的URL可在店铺信息页每个ul-li
标签中找到
4、抓取与解析
4.1、抓取方案
由于大众点评网的登录强制使用扫码或手机验证码登录,且需要输入内容验证码,这对于Selenium库来说是一个挑战。因此,这里我们选择手动登录后从浏览器Headers中获取Cookie进而发送请求
获取Cookie登录信息的步骤如下:
- 打开目标网站:https://www.dianping.com/,然后手动登录
- 进入浏览器开发者工具
=>
检查=>
网络/Network=>
Doc(非Fetch/XHR) - 点击浏览器刷新按钮,在出现的请求中找到第一个接口并点击进入
- 在Headers中的Request Headers下可找到Cookie登录的信息
- 将Request Headers中的内容复制到代码中的Headers中(注意添加单引号)
如下图所示:
4.2、环境准备
导入所需库,并准备代理IP池以及按4.1获取浏览器登录Cookie(Headers信息)
import pandas as pd
import requests
from bs4 import BeautifulSoup
import re
import random
import time
# 免费代理IP
proxies = [
{
'http': '183.95.80.102:8080'},
{
'http': '123.160.31.71:8080'},
{
'http': '115.231.128.79:8080'},
{
'http': '166.111.77.32:80'},
{
'http': '43.240.138.31:8080'},
{
'http': '218.201.98.196:3128'},
{
'http': '112.115.57.20:3128'},
{
'http': '121.41.171.223:3128'}
]
# proxies = [
# 'http://183.95.80.102:8080',
# 'http://123.160.31.71:8080',
# 'http://115.231.128.79:8080',
# 'http://166.111.77.32:80',
# 'http://43.240.138.31:8080',
# 'http://218.201.98.196:3128',
# 'http://112.115.57.20:3128',
# 'http://121.41.171.223:3128'
# ]
# 获取浏览器登录Cookie(Headers信息)
headers = {
<