学期:2021-2022学年第一学期

    学 院 大数据与智能工程学院 年 级、 专 业、 班 18级数据科学与大数据技术(专升本)一班 姓 名
    学号
    实验项目 名称 京东商城的商品列表获取

    实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
    实验日期: 实验成绩: 批改教师: 批改时间:
    指导教师评阅:

    1. 实验目的:编写程序,实现京东商城的所有手机型号、价格等信息列表存储
    2. 实验原理:requests请求、BeautifulSoup库、bs4网页解析
    3. 实验环境 :win10、python3.9、vscode、edge
    4. 实验步骤:
      1. Requests网页请求,获取网页源代码
      2. 使用bs4语法解析网页数据
      3. 返回的京东商品列表主页数据保存为json文件

    核心代码:

    1. import requests as rq
    2. from bs4 import BeautifulSoup as bfs
    3. import json
    4. import time
    5. #访问网址
    6. def get_requests(url):
    7. header={
    8. "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
    9. }
    10. return rq.get(url,headers=header)
    11. def get_urls(num):
    12. URL = "https://search.jd.com/Search"
    13. Param="?keyword=手机&page={}"
    14. return [URL+Param.format(index) for index in range(1,num+1)]
    15. def get_soup(r):
    16. if r.status_code ==rq.codes.ok:
    17. soup=bfs(r.text,"lxml")
    18. else:
    19. print("网络请求失败...")
    20. soup=None
    21. return soup
    22. #获取商品信息
    23. def get_goods(soup):
    24. goods=[]
    25. if soup !=None:
    26. tab_div=soup.find('div',id="J_goodsList")
    27. tab_goods=tab_div.find_all('div',class_="gl-i-wrap")
    28. for good in tab_goods:
    29. name=good.find('div',class_="p-name").text
    30. price=good.find('div',class_="p-price").text
    31. comment=good.find('div',class_="p-commit").find('strong').select_one("a").text
    32. shop=good.find('div',class_="p-shop").find('span').find('a').text
    33. shop_url=good.find('div',class_="p-shop").find('span').find('a')['href']
    34. goods.append({"name":name,"price":price,"comment":comment,"shop":shop,"shop_url":shop_url})
    35. return goods
    36. def save_to_json(goods,file):
    37. with open(file,"w",encoding="utf-8") as fp:
    38. json.dump(goods,fp,indent=2,sort_keys=True,ensure_ascii=False)
    39. if __name__=="__main__":
    40. goods=[]
    41. a=0
    42. for url in get_urls(5):
    43. a+=1
    44. print("当前访问页码{},网址为:{}".format(a,url))
    45. response=get_requests(url)
    46. soup=get_soup(response)
    47. page_goods= get_goods(soup)
    48. goods+=page_goods
    49. print("等待1秒进入下一页...")
    50. time.sleep(1)
    51. for good in goods:
    52. print(good)
    53. save_to_json(goods,"jd_phone2.json")
    1. 实验结果及分析:

    通过requests库,并添加网页请求头,使用代理IP,请求网页url,得到网页数据源代码,并通过BeautifulSoup库使用bs4语法,进行数据整理提取,最后存入json文件。

    1. 实验总结:

    在进行网页爬取时,网站会存在一些反爬机制,如:是否添加请求头、IP访问是否超出网站限制等,在进行网站爬取时,需要注意网站的反爬机制,并使用相对应的反反爬,最终得到数据。