import requests from bs4 import BeautifulSoup import xlwt def get_html(url): # 模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'} print("--> 正在获取网站信息") response = requests.get(url, headers=headers) # 请求访问网站 if response.status_code == 200: html = response.text # 获取网页源码 return html # 返回网页源码 else: print("获取网站信息失败!") if __name__ == '__main__': # 创建workbook,就是创建一个Excel文档 write_work = xlwt.Workbook(encoding='ascii') # 添加一张单 write_sheet = write_work.add_sheet("sheet1") # 创建表头 write_sheet.write(0, 0, label='商品编号') # 第1行 第1列 写入内容'商品编号' write_sheet.write(0, 1, label='商品名称') # 第1行 第2列 写入内容'商品名称' write_sheet.write(0, 2, label='价格') # 第1行 第4列 写入内容'价格' write_sheet.write(0, 3, label='商家') # 第1行 第5列 写入内容'商家' write_sheet.write(0, 4, label='商品详情地址') # 第1行 第6列 写入内容'商品详情地址' # 记录当前行数 _current_row = 0 i=0 k=0 j=0 for k in range(0,5): i = 3+k*2 j = 56+k*60 # 搜索关键字 keyword = 'AJ1' # 搜索地址 search_url= 'https://search.jd.com/Search?keyword=%s&suggest=1.his.0.0&wq=AJ1&pvid=65892364c2604d5897754ab21bed6d22&page=%d&s=%d&click=1'%(keyword,i,j) html = get_html(search_url) # 初始化BeautifulSoup库,并设置解析器 soup = BeautifulSoup(html, 'lxml') # 商品列表 goods_list = soup.find_all('li', class_='gl-item') # 打印goods_list到控制台 for li in goods_list: # 遍历父节点 # 由于我们第一行已经写入了表头。所以这里0+1,就是从第1行开始,后面每次循环+1 _current_row += 1 if _current_row == 29: break # 商品编号 no = li['data-sku'] # 商品名称 name = li.find(class_='p-name p-name-type-2').find('em').get_text() # 价格 price = li.find(class_='p-price').find('i').get_text() # 商家 shop = li.find(class_='p-shop').find('a').get_text() # 商品详情地址 detail_addr = li.find(class_='p-name p-name-type-2').find('a')['href'] # 写入Excel write_sheet.write(_current_row, 0, label=no) write_sheet.write(_current_row, 1, label=name) write_sheet.write(_current_row, 2, label=price) write_sheet.write(_current_row, 3, label=shop) write_sheet.write(_current_row, 4, label=detail_addr) # 保存文件,使用的是相对目录(也可以使用绝对路径),会保存在当前文件的同目录下。文件名为读取多个商品页面1.xls,必须是.xls后缀 write_work.save("./读取多个商品页面1.xls")