从京东商城爬取笔记本电脑(也可自选其他商品) https://list.jd.com/list.html?cat=670%2C671%2C672
货物信息,须包括商品价格p-price、商家p-shop、商品编号data-sku、商品图片(下图所示)可适当添加其他商品信息,至少爬取五页商品信息,将除图片以外的信息进行输出后存储于txt文件或excel文件中。
实验过程-
首先需要了解python和HTML 的基本语法,对网页结构进行分析,然后使用python进行爬取
-
先安装Requests和BeautifulSoup拓展包
requests用来进行请求,BeautifulSoup用来进行对数据的清洗
-
使用requests.get()进行请求,respose为返回的结果
respose = requests.get(local_url, headers=headers)
一开始使用的时候并没有添加headers属性,返回为空结果,在查找资料后发现我们一般写的爬虫会默认向服务器发送爬取请求,而一般情况下网站是不允许被爬虫访问的,输出的text信息中会出现抱歉,无法访问等字眼。**我们通过更改User-Agent字段则可以实现网站请求,实现网页应答。**检查网页后添加属性
headers = { 'user-agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" } -
分析后续页面的页面地址
发现拼接page和s参数进行请求,所以在本地对后续的请求地址进行处理
if page != 1: local_url = local_url + '&page=' + str(page) + '&s=' + str(size) + '&click=0' -
拿到响应的数据之后,先通过对网页结构的分析发现所有的需要的查找的元素都包含在类名为gl-item的li元素下
所以查找所有的类名为gl-item的li元素,在进行保存
li = bf.find_all('li', class_='gl-item') -
遍历li元素,并创建局部变量data进行数据的保存,然后对实验要求的每个数据进行分析网页结构,进行清洗
for item in li: data = {} id = item.get('data-sku') name = item.find_all('div', class_='p-name') shop = item.find_all('div', class_='p-shop') price = item.find_all('div', class_='p-price') price = price[0].find_all('i') temp_shop = shop[0].find_all('span', class_='J_im_icon')在处理的过程中发现会出现爬取不到商家信息的情况出现,所以还需要对爬取不到的情况进行处理
if len(temp_shop) == 0: data['shop'] = "商家信息有误!" else: data['shop'] = temp_shop[0].text图片爬取的是它的地址,之后处理商品名字,因为有的商品名字前会出现京品电脑的字样,所以需要进行处理
name = name[0].find_all('em') if (name[0].text[0:4] == "京品电脑"): data['name'] = name[0].text[6:] else: data['name'] = name[0].text -
打印商品信息,并将其添加到dataList数组中进行存储
data['id'] = id data['price'] = price[0].text data['img'] = img print('number:', data['id']) print('name', data['name']) print('price', data['price']) print('shop', data['shop']) dataList.append(data) -
将其封装为getdata函数,在主函数中进行调用
if __name__ == '__main__': url = 'https://list.jd.com/list.html?cat=670%2C671%2C672' page = int(input("请输入需要爬取的页数:")) for i in range(1, page + 1): getdata(url, i, 30) -
将爬取到的数据存入txt文件中,并添加换行符方便查看
f = open('com.txt', 'w') for line in dataList: f.write(str(line)) f.write('n') f.close() print("保存完毕")



