先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
正文
03 爬取思路
经过一番页面结构分析之后,我们指定爬取思路。首先,我们先获取城市信息。然后将其作为参数,构建 HTTP 请求访问必胜客服务器来获取当前城市中所有餐厅数据。
为了方便数据爬取,我将所有城市全部写入到 cities.txt 中。等要爬取数据时,我们再从文件中读取城市信息。
爬取思路看起来没有错,但是还是有个难题没有搞定。我们每次打开必胜客的官网,页面每次都会自动定位到我们所在的城市。如果无法破解城市定位问题,我们只能抓取一个城市数据。
于是乎,我们再次浏览首页,看看能不能找到一些可用的信息。最终,我们发现页面的 cookies 中有个 iplocation 字段。我将其进行 Url 解码,得到 深圳|0|0 这样的信息。
看到这信息,我恍然大悟。原来必胜客网站根据我们的 IP 地址来设置初始城市信息。如果我们能伪造出 iplocation 字段信息,那就可以随便修改城市了。
04 代码实现
第一步是从文件中读取城市信息。
# 全国有必胜客餐厅的城市, 我将城市放到文件中, 一共 380 个城市
cities = []
def get_cities():
“”" 从文件中获取城市 “”" file_name = ‘cities.txt’
with open(file_name, ‘r’, encoding=‘UTF-8-sig’) as file:
for line in file:
city = line.replace(‘\n’, ‘’)
cities.append(city)
第二步是依次遍历 cities 列表,将每个城市作为参数,构造 Cookies 的 iplocation 字段。
# 依次遍历所有城市的餐厅
for city in cities:
restaurants = get_stores(city, count)
results[city] = restaurants
count += 1
time.sleep(2)
然后,我们再以 POST 方式携带 Cookie 去请求必胜客服务器。最后再对返回页面数据进行提取。
def get_stores(city, count):
“”" 根据城市获取餐厅信息 “”"
session = requests.Session()
# 对【城市|0|0】进行 Url 编码
city_urlencode = quote(city + ‘|0|0’)
# 用来存储首页的 cookies
cookies = requests.cookies.RequestsCookieJar()
headers = {
‘User-agent’: ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36’,
‘accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8’,
‘Host’: ‘www.pizzahut.com.cn’,
‘Cache-Control’: ‘max-age=0’,
‘Connection’: ‘keep-alive’,
}
print(‘第’, count, ‘个城市:’, city, '’)
resp_from_index = session.get(‘http://www.pizzahut.com.cn/’, headers=headers)
# print(resp_from_index.cookies)
# 然后将原来 cookies 的 iplocation 字段,设置自己想要抓取城市。
cookies.set(‘AlteonP’, resp_from_index.cookies[‘AlteonP’], domain=‘www.pizzahut.com.cn’)
cookies.set(‘iplocation’, city_urlencode, domain=‘www.pizzahut.com.cn’)
# print(cookies)
page = 1
restaurants = []
while True:
data = {
‘pageIndex’: page,
‘pageSize’: “50”,
}
response = session.post(‘http://www.pizzahut.com.cn/StoreList/Index’, headers=headers, data=data, cookies=cookies)
html = etree.HTML(response.text)
# 获取餐厅列表所在的 div 标签
divs = html.xpath(“//div[@class=‘re_RNew’]”)
temp_items = []
for div in divs:
item = {}
content = div.xpath(‘./@onclick’)[0]
# ClickStore(‘22.538912,114.09803|城市广场|深南中路中信城市广场二楼|0755-25942012’,‘GZH519’)
# 过滤掉括号和后面的内容
content = content.split(‘(’‘)[1].split(’)‘)[0].split(’‘,’')[0]
if len(content.split(‘|’)) == 4:
item[‘coordinate’] = content.split(‘|’)[0]
item[‘restaurant_name’] = content.split(‘|’)[1] + ‘餐厅’
item[‘address’] = content.split(‘|’)[2]
item[‘phone’] = content.split(‘|’)[3]
else:
item[‘restaurant_name’] = content.split(‘|’)[0] + ‘餐厅’
item[‘address’] = content.split(‘|’)[1]
item[‘phone’] = content.split(‘|’)[2]
print(item)
temp_items.append(item)
if not temp_items:
break
restaurants += temp_items
page += 1
time.sleep(5)
return restaurants
第三步是将城市以及城市所有餐厅信息等数据写到 Json 文件中。
with open(‘results.json’, ‘w’, encoding=‘UTF-8’) as file:
file.write(json.dumps(results, indent=4, ensure_ascii=False))
05 爬取结果
最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-T5c5Jn4g-1713614465738)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!