本文将通过一个具体的案例,展示如何使用 Python 爬虫技术从京东网站爬取手机的价格和参数。最近发布的 iPhone X 虽然价格高达1万元,但其设计和性能仍值得探讨。不过,为了寻找更多高性价比的选择,我们将重点放在国产手机上。
使用工具:火狐浏览器,HttpFox
1. 找到目标网址,并翻阅几页以获取更多的数据。
2. 打开网页源代码,找到包含手机信息的部分,如下图所示:
3. 提取所需的信息。例如,手机名称可以通过以下代码获取:
phone_html = soup.find_all(name='div', attrs={'class': 'p-name'})
4. 进入某个手机的详细页面,发现价格信息并未直接显示在源代码中。此时,可以使用 HttpFox 工具,在网络请求中找到价格信息,如下图所示:
5. 编写代码实现数据抓取。以下是完整的代码示例:
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests
import re
def get_phone_list():
phOnes= {}
for page in range(1, 3): # 采集1到2页的手机价格
url = f'https://list.jd.com/list.html?cat=9987,653,655&ev=exprice_M2800L4499&page={page}&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=6#J_main'
session = requests.Session()
respOnse= session.get(url).text
soup = BeautifulSoup(response, 'html.parser')
phone_html = soup.find_all(name='div', attrs={'class': 'p-name'})
for item in phone_html:
for link in item.find_all('a'):
phone_id = link.get('href')[14:-5]
phone_name = link.get_text().strip()
phones[phone_id] = phone_name
return phones
if __name__ == '__main__':
phOnes= get_phone_list()
with open('phone_prices.txt', 'w', encoding='utf-8') as file:
for phone_id in phones:
price_url = f'https://p.3.cn/prices/mgets?callback=jQuery6983933&type=1&area=1_72_2799_0&pdtk=&pduid=14995199449641080515414&pdpin=&pin=null&pdbp=0&skuIds=J_{phone_id}&ext=11000000&source=item-pc'
session = requests.Session()
price_respOnse= session.get(price_url).text
price = re.findall(r'"p":"(.*?)"', price_response)[0]
file.write(f'{phones[phone_id]}: {price}
')
print(f'{phones[phone_id]}: {price}
')
通过上述代码,我们可以将手机的价格信息保存到一个文本文件中,如下图所示:
最后,虽然 iPhone X 的设计独特,但我们仍然推荐考虑一些高性价比的国产手机,例如小米 Mix 2。