在2024年,各大厂商又出了不少新款手机,功能和外观一个比一个炫酷,很多人对各大厂商对于这一品类的市场竞争力也很好奇,但是困于这类产品平台,品类真的太多了,收集对比起来繁琐复杂,但是,只要我们通过代理IP来批量获取这一数据,可以说就简单很多了。所以,今天我们将一起来看看,如何从各大电商网站收集手机这一品类的数据。
一、爬取目标
我们爬取的目标以华为荣耀Magic7 Pro手机的电商网站的商品数据为主,包括商品名称、价格、销量和用户评价等。通过代理IP,我们可以快速获得大量数据,例如商品价格、销量、用户评价等,用于我们后续市场分析和研究。
二、实现效果
利用python实现自动化批量获取华为荣耀Magic7 Pro手机的电商数据,并存储到本地文件中。
三、准备工作
在开始编写爬虫之前,我们需要确保我们的开发环境已经准备好:
- Python:3.10
- 编辑器:PyCharm
- 第三方模块,自行安装requests库,安装方法为pip install requests
def get html(self): res =requests.get(self.url,headers=self.headers) html = res.text return html #返回的源代码
四、代理IP
4.1 使用代理的好处
使用代理IP可以让我们数据采集更安全性、效率,数据也更加多样性。代理IP以保护我们的网络活动不被监控;我们在使用的时候通过分散请求压力提高爬取速度;同时,从不同地理位置获取数据,数据也能更加准确、全面。
4.2 获取代理IP
青果网络提供的代理IP服务可以帮助我们提高爬取的成功率。他们家的代理IP使用下来会比同类厂商提供的业务成功率高,服务器稳定,还是在这一行业做了将近10年的老大哥,产品使用的数据采集应用场景也多,售后什么的也很有保障。
五、代理实战
5.1 导入模块
在Python中,我们有一系列的模块可以帮助我们完成爬虫的任务。这些模块包括requests
用于发送网络请求,lxml
用于解析HTML和XML文档,time
用于控制请求的频率,以及os
用于文件和目录操作。
# 导入模块 import requests from lxml import etree import time
5.2 设置翻页
为了获取尽可能多的数据,我们需要处理一下网站的翻页机制。也就是要我们能够根据页码构造出不同的URL,并能够循环地访问每一页。
if __name__ == '__main__': page_number = 1 for i in range(1, page_number + 1): url = f'https://search.jd.com/s_new.php?keyword=华为荣耀Magic7 Pro&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&offset=3&wq=华为荣耀Magic7 Pro&page={0}&s=26&scrolling=y&pos=30&show_items={1}'
5.3 获取商品数据
获取商品数据是爬虫的核心任务,我们还需要得到异步加载的url中的参数show_items:
def get_pids(self): html = self.get_html() soup = Beautifulsoup(html,'lxml') #创建Beautifulsoup对象 lis = soup.find_all("li",class_='gl-item') #查找1i标签 for li in lis: data pid.li.get("data-pid") #得到1i标签下的data-pid if(data_pid): #这里的self.pids是一个集合,用于过滤重复的 self.pids.add(data_pid)
接着,我们直接用多线程直接每一页开启一个线程,可以加快采集的速度。
def get_extend_imgs_data(self): # self.search urls=self.search_urls+','.join(self.pids) self.search_urls =self.search_urls.format(str(self.search_page),','.join(self.pids)) #拼凑ur1,将获得的单数拼成ur1,其中show_items中的id是用',隔开的,因此要对集合中的每一个id分割,page就是偶数,这里直接用主网页的page加一就可以了 print self.search_urls html = requests.get(self.search urls, headers=self.headers).text #请求 soup = Beautifulsoup(html,'lxml') div_search = soup.find_all("div",class ='p-img') #解析 for div in div_search: img_3 = div.find("img").get('data-lazy-img') #这里可以看到分开查找img属性 img_4 = div.find("img").get("src") if img_3: #如果是data-lazy-img print img_3 self.sql.save img(img_3) #存储到数据库 self.img_urls.add(img_3) #用集合去重 if img_4: #如果是src属性 print img_4 self.sql.save_img(img_4) self.img urls.add(img_4)
以上,就是我们这次利用青果网络代理IP做华为荣耀Magic7 Pro手机的电商数据采集的完整流程,如果有其他的需要,可以联系我。
手机数据来源:item.jd.com
代理IP资源:qg.net