学期:2021-2022学年第一学期
学 院 | 大数据与智能工程学院 | 年 级、 专 业、 班 | 18级数据科学与大数据技术(专升本)一班 | 姓 名 | 学号 | ||
---|---|---|---|---|---|---|---|
实验项目 名称 | 京东商城的商品列表获取 |
实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
实验日期: 实验成绩: 批改教师: 批改时间:
指导教师评阅:
- 实验目的:编写程序,实现京东商城的所有手机型号、价格等信息列表存储
- 实验原理:requests请求、BeautifulSoup库、bs4网页解析
- 实验环境 :win10、python3.9、vscode、edge
- 实验步骤:
- Requests网页请求,获取网页源代码
- 使用bs4语法解析网页数据
- 返回的京东商品列表主页数据保存为json文件
核心代码:
import requests as rq
from bs4 import BeautifulSoup as bfs
import json
import time
#访问网址
def get_requests(url):
header={
"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"
}
return rq.get(url,headers=header)
def get_urls(num):
URL = "https://search.jd.com/Search"
Param="?keyword=手机&page={}"
return [URL+Param.format(index) for index in range(1,num+1)]
def get_soup(r):
if r.status_code ==rq.codes.ok:
soup=bfs(r.text,"lxml")
else:
print("网络请求失败...")
soup=None
return soup
#获取商品信息
def get_goods(soup):
goods=[]
if soup !=None:
tab_div=soup.find('div',id="J_goodsList")
tab_goods=tab_div.find_all('div',class_="gl-i-wrap")
for good in tab_goods:
name=good.find('div',class_="p-name").text
price=good.find('div',class_="p-price").text
comment=good.find('div',class_="p-commit").find('strong').select_one("a").text
shop=good.find('div',class_="p-shop").find('span').find('a').text
shop_url=good.find('div',class_="p-shop").find('span').find('a')['href']
goods.append({"name":name,"price":price,"comment":comment,"shop":shop,"shop_url":shop_url})
return goods
def save_to_json(goods,file):
with open(file,"w",encoding="utf-8") as fp:
json.dump(goods,fp,indent=2,sort_keys=True,ensure_ascii=False)
if __name__=="__main__":
goods=[]
a=0
for url in get_urls(5):
a+=1
print("当前访问页码{},网址为:{}".format(a,url))
response=get_requests(url)
soup=get_soup(response)
page_goods= get_goods(soup)
goods+=page_goods
print("等待1秒进入下一页...")
time.sleep(1)
for good in goods:
print(good)
save_to_json(goods,"jd_phone2.json")
- 实验结果及分析:
通过requests库,并添加网页请求头,使用代理IP,请求网页url,得到网页数据源代码,并通过BeautifulSoup库使用bs4语法,进行数据整理提取,最后存入json文件。
- 实验总结:
在进行网页爬取时,网站会存在一些反爬机制,如:是否添加请求头、IP访问是否超出网站限制等,在进行网站爬取时,需要注意网站的反爬机制,并使用相对应的反反爬,最终得到数据。