python爬取大众点评美食店铺数据
时间: 2025-02-20 14:19:55 浏览: 93
### 使用Python编写爬虫程序从大众点评网获取美食店铺数据
#### 准备工作
为了成功抓取大众点评网站上的美食店铺数据,准备工作至关重要。确保安装了最新版本的 Python 和 Scrapy 框架[^3]。
```bash
# 更新pip至最新版
python -m pip install --upgrade pip
# 安装Scrapy库
pip install scrapy
```
#### 创建Scrapy项目
创建一个新的 Scrapy 项目用于存储所有的代码文件和配置项:
```bash
scrapy startproject dianping_spider
cd dianping_spider
```
#### 配置中间件规避反爬机制
考虑到大众点评存在较为严格的反爬措施,在 `settings.py` 中设置合理的请求头以及启用随机User-Agent插件来模拟正常浏览器访问行为,提高成功率[^1]:
```python
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 2
RANDOM_UA_PER_PROXY = True
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
```
#### 开发具体Spider逻辑
定义具体的 Spider 类继承自 `scrapy.Spider`, 并实现解析页面的方法 `_parse()` 来提取所需字段如店名、评分等信息[^2]:
```python
import scrapy
from ..items import DianpingItem
class ShopSpider(scrapy.Spider):
name = "shops"
allowed_domains = ["dianping.com"]
start_urls = ['http://www.dianping.com/search/category/1/10']
def parse(self, response):
items = []
for sel in response.xpath('//div[@id="shop-all-list"]/ul/li'):
item = DianpingItem()
try:
item['name'] = sel.css('.txt>.tit h4::text').extract_first().strip()
item['score'] = float(sel.css('.sml-rank-stars::attr(class)').re(r'\d+\.\d+')[0])
yield item
except Exception as e:
print(e)
next_page_url = response.css('a.NextPage::attr(href)').get()
if next_page_url is not None:
yield scrapy.Request(response.urljoin(next_page_url))
```
此段代码通过 XPath 表达式定位 HTML 文档中的特定节点,并从中抽取文本内容作为最终结果的一部分;同时处理分页情况下的链接跳转问题以遍历多页列表。
阅读全文
相关推荐














