新人的第二篇文章,写的不好请见谅

这段代码只是针对京东的商品信息爬取,很多都是根据页面源码去匹配获取数据的,别的网站用不了,也可能过一段时间官方修改了页面就不能用了,不过这里也只是提供学习使用,希望可以帮到初学者

这里附上两个我学习时用的文章
使用的是requests+BeautifulSoup请求以及解析网页(本文章所使用的技术)

这个是使用的webdriver,和本文不一样,有需要的可以看一下

'''
爬取的是京东的8424西瓜的商品信息
要爬取企业信息需要验证码,要一个一个输入
若不爬取企业信息则可以实现自动爬取想要的页数,请做如下改动
注释掉97行115行124行132行   打开125行(加了几行注释可能行数就变了,不过下面相应的行也会标出注释)
'''
import re
import xlwt
import time
import requests
from PIL import Image
from bs4 import BeautifulSoup
#from lxml import etreeitem_value = []
count = 1
browser = requests.session()
requestVerifyCodeUrl = "https://mall.jd.com/sys/vc/createVerifyCode.html"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}def parserUrl(url, params={}):#解析URL(要多次请求所以就单独列出来一个方法)global headersreq = requests.get(url, headers=headers, params=params)#headers一定要有,模拟浏览器请求,params是参数#time.sleep(1)  #貌似不需要1s就可以一直请求京东,淘宝好像就会有验证soup = BeautifulSoup(req.text, "lxml")return soupdef enterprisePage(url):#处理企业详情页面相关数据while True:global headersglobal requestVerifyCodeUrl#这里不可以用requests.get请求了,因为cookie的缘故,这个是我找到的最简单的解决办法了browser = requests.session()就可以自动保存cookie了req = browser.get(requestVerifyCodeUrl, headers=headers)#保存验证码图片f = open("VerifyCodeImage.jpg", 'wb')f.write(req.content)f.close()f1 = open("VerifyCodeImage.jpg", 'rb')image = Image.open(f1)image.show()f1.close()#手动输入vc = input('请输入验证码:')#深度学习识别会在后续的文章中给出datas = {'verifyCode' : vc}#这里使用browser.post就会和上面请求验证码的cookie一致了req2 = browser.post(url, data=datas, headers=headers)soup = BeautifulSoup(req2.text, "lxml")#判断若是有form的代码块则证明没有验证成功,这个就要去网页源码中观察俩个页面的差异了if soup.find('form'):print('验证码输入错误!请重新输入!')continueinfoList = soup.find_all('li', attrs={'class':'noBorder'})#获取企业相关信息代码段for info in infoList:if info.find('label', attrs={'class':'jLabel'}):if info.find('label', attrs={'class':'jLabel'}).text == "企业名称: ":item_value.append(info.find('span').text)#企业名称if info.find('label', attrs={'class':'jLabel'}).text == "公司地址:":item_value.append(info.find('span').text)#企业地址returndef itemPage(url):#处理商品详情页面相关数据#净含量是在列表页面没有的所以要进到详情页面获取soup = parserUrl(url)clearfixList = soup.find_all('dl', attrs={'class':'clearfix'})#获取重量相关代码段for clearfix in clearfixList:if clearfix.find('dt').text == "净含量":weight = re.sub("[a-zA-Z]", "", clearfix.find('dd').text)return weightreturn Nonedef storePage(url):#处理店铺详情页面相关数据#严格来说并没有进到店铺页面,这个页面没有什么要获取的,但是要从这里获取企业页面于是就中间加了这么一个函数storID = re.sub("[^0-9]", "", url)enterpriseUrl = 'https://mall.jd.com/showLicence-' + str(storID) + '.html'#本来企业url是在店铺页面中爬取的,但是是动态加载的,源码中是没有的,但是经过观察发现这这两个页面的url一部分是固定的,#只是更改了店铺的id,这样我们就可以拼接出企业url了(曲线救国)enterprisePage(enterpriseUrl)def mainPage(sheet, n):#处理搜索页面相关数据url = "https://search.jd.com/search?"#只要参数这样设置只改变n就可以爬取想要的页数的数据了,不用考虑翻页和下拉滚动条params = {"keyword":"8424西瓜", 'page':str(n), 'scrolling':'y'}soup = parserUrl(url, params)#下面的相关信息的获取都是要求网页源码中对应的字段去匹配,并不是所有网站通用的item_list = soup.find_all("li", attrs={"class":"gl-item"})for item in item_list:p_name = item.find('div', attrs={"class":"p-name p-name-type-2"})#获取商品相关代码段itemName = p_name.find('em').textitemUrl = 'https:' + p_name.find('a')['href']p_price = item.find('div', attrs={"class":"p-price"})#获取价格相关代码段itemPrice = p_price.find('i').textp_shop = item.find('div', attrs={"class":"p-shop"})#获取店铺相关代码段storeName = p_shop.find('a').textstoreUrl = 'https:' + p_shop.find('a')['href']item_value.clear()item_value.append(storeName)#店铺名字item_value.append(storeUrl)#店铺URLitem_value.append(itemName)#商品名字item_value.append(itemUrl)#商品URlstorePage(storeUrl)#在店铺页面处理数据   不输入验证码注释掉这一行item_value.append(itemPrice)#商品价格itemWeight = itemPage(itemUrl)#在商品页面处理数据if itemWeight:item_value.append(itemWeight)#商品重量else :item_value.append(0)if itemWeight:itemUnitPrice = float(itemPrice) / float(itemWeight) / 2item_value.append('%.2f' %itemUnitPrice)#商品单价else :item_value.append(0)#写入excel表global countfor i in range(0, len(item_value)):sheet.write(count, i, item_value[i])count += 1if count == 4: return#不输入验证码注释掉这一行,数字减一是爬取商品的数目if n%2 == 0:print("******已完成第" + str(n/2) +"页商品信息写入******")def main():n = input("请输入要爬取的页数:")n = int(n) * 2print("**************正在写入**************")print("请稍候...")value_title = ['店铺名称','店铺URL','商品名称','商品URL','企业名称','企业地址','价格(元)','重量(kg)','单价(元/500g)']#不输入验证码注释掉这一行并且打开下一行#value_title = ['店铺名称','店铺URL','商品名称','商品URL','价格(元)','重量(kg)','单价(元/500g)']workbook = xlwt.Workbook()sheet = workbook.add_sheet('8424西瓜')for i in range(0, len(value_title)):sheet.write(0, i, value_title[i])#写入表头'''    这里要说明一下京东的搜索页面最开始是只加载一半的,当下拉滚动条会加载剩下的一半,又发现url中的参数page=1当点击下一页page=3,会这样每次+2,通过下拉滚动条加载后半页抓包可见页面是发送了一个请求的,这个请求的网址的page参数是2,4,6双数的,不难发现只要n++就可以一个不漏的爬取所有信息了,不需要什么模拟下拉滚动条和翻页,所以要爬取1页page=1-2,爬取2页page=1-4,爬取3页page=1-6,不要习惯的从0开始哈'''for i in range(1, n+1):mainPage(sheet, i)break#不输入验证码注释掉这一行workbook.save('京东商品数据.xls')print("**************写入完成**************")if __name__ == '__main__':main()

源文件这里可以下载,不过也就是一份.py的文件,就是上面的代码没加注释版。

前人栽树后人乘凉,乘凉之后也要记得栽树哦。

python爬虫_爬取京东商品写入Excel表相关推荐

  1. Python爬虫:爬取京东商品简介

    Python爬虫 目录导航 1.前言 目的 关于爬虫 关于Python 2.准备 工具 安装第三方库和包 3.敲代码 1.爬取网站信息 2.筛选需要的信息 3.持久化数据 4.扩展(分页爬取) 4.代 ...

  2. 利用Python爬虫技术爬取京东商品评论

    这是我第一次接触python时,我们学校做的项目实训,其实整个项目实训过程很简单,并没有什么难度,认真学学就会. 首先,我们要明确我们的目标:从京东上爬取产品的评论.一般评论都是进行情感分析,但我还没 ...

  3. python爬虫实践-爬取京东商品图片

    这段时间,因为疫情在家无聊,想起了网络爬虫,之前有写过使用requests库,又学了下使用urllib库,在这里记录下学习过程. 首先使用的IDE是pycharm,解释器版本3. 第一步:分析某东的u ...

  4. 【Python爬虫】 爬取京东商品图片并下载

    1. 引入库 import requests from lxml import etree 2. 请求数据(headers 的作用是将请求伪装成浏览器的请求,可以跳过简单的爬虫拦截) url = &q ...

  5. 爬虫初学——爬取京东商品的评论(一)

    最近,初学了一些爬虫的知识,然后刚好被老师要求去爬取一些评论数据(淘宝.京东等),来进行深度学习识别虚假评论.然后咋办咧,东搜搜西搜搜,看有没有什么好的办法.毕竟之前可是被反爬机制很强的网站弄得毫无头 ...

  6. python翻页爬取京东商品评价

    python翻页爬取京东商品评价 以小米手机评论为案例 1.找到目标的url 2.检查响应结果 3.解析json数据,发现相应数据无法成功解析 注意:json数据一般都是以大括号或中括号开头或者结尾的 ...

  7. python爬取京东商品信息代码_爬取京东商品信息

    利用 BeautifulSoup + Requests 爬取京东商品信息并保存在Excel中 一.查看网页信息 打开京东商城,随便输入个商品,就选固态硬盘吧 先看看 URL 的规律,可以看到我们输入的 ...

  8. python爬虫爬商品库存_python爬虫实践——爬取京东商品信息

    1 ''' 2 爬取京东商品信息:3 请求url:4 https://www.jd.com/5 提取商品信息:6 1.商品详情页7 2.商品名称8 3.商品价格9 4.评价人数10 5.商品商家11 ...

  9. Java实现网络爬虫:爬取京东商品案例

    Java实现网络爬虫 爬取京东商品案例 需求分析 代码实现 爬取京东商品案例 需求分析 一.需求 抓取京东商城的数据,把商品数据保存到数据库. 二.功能分析 使用HttpClient发送一个get请求 ...

最新文章

  1. ajax对服务器路径请求
  2. Bruce Eckel教你如何爬出 Gradle 的“坑”?
  3. python相机拍照显示时间_python让图片按照exif信息里的创建时间进行排序的方法...
  4. 软件工程——团队作业3
  5. NLP神器—Gensim
  6. java中怎么删除多表连接_在Java中从多个列表中合并和删除重复的最佳方式
  7. 无限路由器故障排查细则
  8. 员工自动离职可以申请经济补偿吗
  9. 2022年低压电工考试题及在线模拟考试
  10. 最新论文阅读(17)--Pyramidal RoR for Image Classification
  11. sql 按照天环比_同比环比sql实例
  12. 屏幕录制:4Easysoft Screen Recorder Mac中文版
  13. 南华大学计算机系宿舍,2021年南华大学新生宿舍条件和宿舍环境图片
  14. 去除字符串中的转义字符
  15. 03前端第三章Javascript
  16. 计算机英语发展,计算机发展史(英语版)
  17. 画部分点之间的连线图
  18. 2016正在远去的消费互联网时代
  19. setVisibility中INVISIBLE和GONE的区别
  20. 动手学深度学习笔记(一)——权重衰退

热门文章

  1. Jetson-Xavier-NX使用教程(这里说插上烧好镜像的SD卡上电就可以直接用了)
  2. 垂直供应链电子商务平台-未来电子商务战略趋势
  3. 联想平板android版本升级,联想乐Pad A1平板安卓4.0升级操作详细教程
  4. 599. 两个列表的最小索引总和【C++】
  5. 【VirtualBox报错】不能为虚拟电脑打开一个新任务. Not in a hypervisor partition (HVP=0) (VERR_NEM_NOT_AVAILABLE).
  6. Lua string字符串相关操作
  7. 计算机应用4班班委决定,大学毕业游策划书
  8. C++贪心——纪念品分组
  9. 2021.01.05丨根据基因名称拼接表达量与相关注释
  10. BlogBus发难:博客为什么不能随便搬家?