爬取中机昌盛商城数据.md
1.介绍项目
2.分析网站结构
3.说明技术选择
4.数据存储于MySQL中
5.完整代码
1. 介绍项目
爬取中机昌盛商城,以型号,品牌或货位仓码为查询条件(例如GP)来获取结果页面的商品数据。要求如下(2和4选择其一实现即可,选择第四项可加分):
1.需要获取的数据有商品、产地、库存、价格、发货地、发货仓
2.搜索结果的每一页数据都要爬取,至少要有20个品牌(20个搜索结果)的数据量,或者五大地区的搜索结果页面数据。
3.可任意选择爬虫框架,但使用selenium扣300分。
4.做成动态搜索程序,即由用户选择搜索的内容(当用户输入GP时,返回GP搜索页的数据,其它同理),并给出提示,而不是代码固定搜索的内容。
5.数据存储于MongoDB或MySQL中。
6.提交的文章需要有环境分析、页面分析与代码分析,否则相应扣分,文章内容要满足初学者小白可阅读,优秀文章加分
网址:https://www.zjshop.com.cn
2. 分析网站结构
复制网址(中机昌盛商城 (zjshop.com.cn))到浏览器,鼠标右键点击查看,再点击网络,刷新网页抓包。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9Wq40RU-1666850905619)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\1.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oV6Jcy8P-1666850905621)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\2.png)]
发现该网址请求方式为get请求,编码格式为utf-8。
任意选择一个品牌,进行数据抓包,发现该包有我们所需数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXuksEXi-1666850905622)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\3.png)]
为了更好地抓取想要的品牌数据,对比两家品牌的url,发现其的不同之处在于参数pbrandName=???,由此我们可以使用input函数对所需品牌数据抓取。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNhyj1Tp-1666850905623)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBnUyjY9-1666850905625)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\5.png)]
3.说明技术选择
爬取该网页的方法多种多样,此文章选择selenium进行抓取。
导入所需模块
from selenium import webdriver
import time # 时间模块
使用xpath获取库存数据,其他数据同理可得,将说获取数据添加到对应列表。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IXoAFzi8-1666850905626)(C:\Users\16611\Desktop\项目\9.爬取中机昌盛商城数据\图片\11.png)]
# 1商品
aaa = driver.find_elements_by_xpath('/html/body/div[8]/div/div[2]/table/tbody/tr[*]/td[1]/div/div[2]/a/p/span')
list_name = []
for a in aaa:
list_name.append(a.text)
# print('商品:', list_name)
# 将每页所获取的数据追加到列表
lists_name += list_name
# 2发货仓
aaaa = driver.find_elements_by_xpath('/html/body/div[8]/div/div[2]/table/tbody/tr[*]/td[2]/div/span')
list_warehouses = []
for aa in aaaa:
list_warehouses.append(aa.text)
# print('发货仓:', list_warehouses)
# 将每页所获取的数据追加到列表
lists_warehouses += list_warehouses
# 3发货地
ele = driver.find_elements_by_xpath('/html/body/div[8]/div/div[2]/table/tbody/tr[*]/td[3]/div/span')
list_place = []
for ele2 in ele:
list_place.append(ele2.text)
# print('发货地:', list_place)
# 将每页所获取的数据追加到列表
lists_place += list_place