2022年 11月 7日

利用Python语言爬取京东购物平台商品信息数据,并且爬取多个商品页面。

温馨提示:看完文章开头的链接文章后,看这篇文章才能看懂。

一、
python爬取京东网页的商品信息数据,下面这位作者讲的很清楚,推荐大家去看。我大约花费3个小时弄懂。

话不多说,来链接:
Python爬虫:爬取京东商品简介_KonBAI-Q的博客-CSDN博客_京东爬虫

二、爬取多个页面

好,在前面作者工作的基础上:爬取一个京东网站搜索结果的页面,是30件商品的信息。我给代码添加了一个循环使可以爬取任意个页面,即30*X件商品信息。
1、首先放原作者的爬取单个页面代码:
  1. import requests
  2. if __name__ == '__main__':
  3. url = 'https://search.jd.com/Search?keyword=Leonard1&enc=utf-8' # 目标网站地址
  4. # 模拟浏览器访问
  5. headers = {
  6. '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'
  7. }
  8. response = requests.get(url, headers=headers) # 请求访问网站
  9. html = response.text # 获取网页源码
  10. print(html) # 将源码打印到控制台

2、上面运行结果是:

 3、这个意思是爬取了网页中所有源码,需要筛选,看上面的链接文章就可以。

4、对上面代码加一个循环1

  1. for k in range(05):#一共爬取5次即5个页面
  2. i = 3+k*2 #页码每次加2
  3. j = 56+k*60 #商品数量每次加60
  4. keyword = 'AJ1’ # 搜索关键字
  5. 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)

5、其实就是把网页链接每次刷新,爬取多次;代码可以直接用:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import xlwt
  4. def get_html(url):
  5. # 模拟浏览器访问
  6. headers = {
  7. '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'}
  8. print("--> 正在获取网站信息")
  9. response = requests.get(url, headers=headers) # 请求访问网站
  10. if response.status_code == 200:
  11. html = response.text # 获取网页源码
  12. return html # 返回网页源码
  13. else:
  14. print("获取网站信息失败!")
  15. if __name__ == '__main__':
  16. # 创建workbook,就是创建一个Excel文档
  17. write_work = xlwt.Workbook(encoding='ascii')
  18. # 添加一张单
  19. write_sheet = write_work.add_sheet("sheet1")
  20. # 创建表头
  21. write_sheet.write(0, 0, label='商品编号') # 第1行 第1列 写入内容'商品编号'
  22. write_sheet.write(0, 1, label='商品名称') # 第1行 第2列 写入内容'商品名称'
  23. write_sheet.write(0, 2, label='价格') # 第1行 第4列 写入内容'价格'
  24. write_sheet.write(0, 3, label='商家') # 第1行 第5列 写入内容'商家'
  25. write_sheet.write(0, 4, label='商品详情地址') # 第1行 第6列 写入内容'商品详情地址'
  26. # 记录当前行数
  27. _current_row = 0
  28. i=0
  29. k=0
  30. j=0
  31. for k in range(0,5):
  32. i = 3+k*2
  33. j = 56+k*60
  34. # 搜索关键字
  35. keyword = 'AJ1'
  36. # 搜索地址
  37. 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)
  38. html = get_html(search_url)
  39. # 初始化BeautifulSoup库,并设置解析器
  40. soup = BeautifulSoup(html, 'lxml')
  41. # 商品列表
  42. goods_list = soup.find_all('li', class_='gl-item')
  43. # 打印goods_list到控制台
  44. for li in goods_list: # 遍历父节点
  45. # 由于我们第一行已经写入了表头。所以这里0+1,就是从第1行开始,后面每次循环+1
  46. _current_row += 1
  47. if _current_row == 29:
  48. break
  49. # 商品编号
  50. no = li['data-sku']
  51. # 商品名称
  52. name = li.find(class_='p-name p-name-type-2').find('em').get_text()
  53. # 价格
  54. price = li.find(class_='p-price').find('i').get_text()
  55. # 商家
  56. shop = li.find(class_='p-shop').find('a').get_text()
  57. # 商品详情地址
  58. detail_addr = li.find(class_='p-name p-name-type-2').find('a')['href']
  59. # 写入Excel
  60. write_sheet.write(_current_row, 0, label=no)
  61. write_sheet.write(_current_row, 1, label=name)
  62. write_sheet.write(_current_row, 2, label=price)
  63. write_sheet.write(_current_row, 3, label=shop)
  64. write_sheet.write(_current_row, 4, label=detail_addr)
  65. # 保存文件,使用的是相对目录(也可以使用绝对路径),会保存在当前文件的同目录下。文件名为读取多个商品页面1.xls,必须是.xls后缀
  66. write_work.save("./读取多个商品页面1.xls")

爬取不同的商品名称只需改代码里的keyword即可。

三、爬取多个页面原理

原理就是每一个页面都对应一个特定的网页链接【URL】

对于京东网页,你搜索了指定商品后利用键盘左右建或者鼠标点击换页键都可以更改商品页面。

搜索’AJ1‘后的网页链接1

AJ1 – 商品搜索 – 京东 (jd.com)

点击键盘方向键盘右键—>后或鼠标点击下一页后的页面的网页链接2

AJ1 – 商品搜索 – 京东 (jd.com)再点击一次下一页后的网页链接3

AJ1 – 商品搜索 – 京东 (jd.com)如果你很细心地观察了网页链接的组成,会发现:网页链接2、网页链接3  的组成内容不同的仅仅是

&page=5&s=116

这里面page与s对应的数值不同而且有规律:

每点一次下一页,page+2,s+60,根据这个规律就可以设置循环1,达到爬取多个页面的目的。

温馨提示:看完文章开头的链接文章后,看这篇文章才能看懂。

四、提示语

希望大家广泛传播,让更多的人方便地学到知识是笔者地荣幸。