目录

  • 前言
  • 一、需要的Python库安装
    • 1.设置默认pip默认安装路径
    • 2.下载浏览器驱动(以chrome为例)
  • 二、使用步骤(代码以函数为单位分开展示)
    • 1.引入库
    • 2.设置关键词和浏览器设置
    • 3.定义获取密码函数
    • 4.定义获取图片信息,返回最佳匹配位置函数
    • 5.定义滑动函数
    • 6.定义实现登录函数
    • 7.定义文件保存函数
    • 8.定义爬取函数
    • 9.定义首次运行函数
    • 10.定义继续运行函数
    • 11.定义主函数
  • 三、代码整体展示
  • 总结

前言

最近需要些简单的商品数据信息,听说淘宝反爬虫反的厉害,自己Python学习花的时间少,人菜的抠脚,就打起了京东的注意

这gif去重后晃得我眼痛


一、需要的Python库安装

1.设置默认pip默认安装路径

安装前注意pip默认安装目录设置
查看位置为python目录下的Lib\site.py文件
设置参数(因为需要转义 写成r‘Path和单反斜的形式’ 或 ‘Path和双反斜的形式’)
USER_SITE=r‘D:\Python\Lib\site-packages’
USER_BASE =r‘D:\Python\Scripts’

↑site.py文件示意↑

如果你不想设置保存位置参数
①手动跳转到你的python安装目录下再使用pip命令安装(不然要么在c盘给你安装整个python,要么迫害你的c盘剩余容量)
②使用pip命令时使用 --target=Path 参数指定安装目录


↑pip安装示意图↑

2.下载浏览器驱动(以chrome为例)

打开谷歌浏览器访问下面的地址,查看谷歌浏览器版本
chrome://version/

↑查看chrome版本示意图↑
驱动下载链接
链接: 谷歌浏览器驱动下载.
下载相应版本的驱动(或者最接近的版本)

将终端放在chrome目录下(放其他地方注意改环境变量就行)

↑chrome目录↑

↑Win10设置驱动环境变量↑

二、使用步骤(代码以函数为单位分开展示)

1.引入库

代码如下:

import time
from urllib import request
import cv2
from selenium import webdriver
# from random import random
import pyautogui
from numpy import random
from lxml import etree

2.设置关键词和浏览器设置

代码如下:

#设置搜索关键词(根据需要修改)
keyword=['显卡','cpu','主板','内存','硬盘','散热器','机箱','外设','显示器','整机','笔记本电脑','平板','手机']#对浏览器驱动进行设置
option=webdriver.ChromeOptions()
# option.add_argument('headless') #隐藏浏览器窗口(因为登录滑块需要使用鼠标,只能改为最小化)
option.add_argument("disable-blink-features=AutomationControlled") #去掉chrome的webdriver痕迹
browser = webdriver.Chrome(options=option)

驱动设置为不隐藏窗口;去除webdriver信息。


3.定义获取密码函数

代码如下:

#获取密码函数
def getLoginText():f=open('D:\\PyCode\\txt\\JDLogin.txt', 'r', encoding='utf-8')temp = f.readlines()doc=[]#去除元素中的换行转义for t in temp:t=t.strip('\n')doc.append(t)return doc

文件第一行是用户名,第二行是密码(没有任何前后缀。
直接在登录代码中明文定义账号密码不太好,容易泄露


4.定义获取图片信息,返回最佳匹配位置函数

代码如下:

#获取图片信息,返回最佳匹配位置
def findPic(target="img1.jpg", template="img2.png"):# 读取图片target_rgb = cv2.imread(target)# 图片灰度化target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)# 读取模块图片template_rgb = cv2.imread(template, 0)# 匹配模块位置res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)# 获取最佳匹配位置value = cv2.minMaxLoc(res)# 返回最佳X坐标return value[2][0]

5.定义滑动函数

代码如下:

#验证码滑动
def LoginSlide():#获取滑块图像target = browser.find_element_by_xpath('//div[@class="JDJRV-bigimg"]/img')template = browser.find_element_by_xpath('//div[@class="JDJRV-smallimg"]/img')# 获取模块的url路径src1 = target.get_attribute("src")src2 = template.get_attribute("src")# 下载图片(参数二可以用 filename=‘想存放的目录位置+文件名’ 设置图片保存位置,只设置文件名默认保存在和代码统一目录下)request.urlretrieve(src1,"img1.jpg")request.urlretrieve(src2,"img2.png")x = findPic()w1 = cv2.imread('img1.jpg').shape[1]w2 = target.size['width']x = x / w1 * w2# 按钮坐标(可以打开浏览器自己量一下,这里是1080p下大概坐标)offset_x,offset_y = 1169,484# pyautogui库操作鼠标指针pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))pyautogui.mouseDown()offset_y += random.randint(9,19)pyautogui.moveTo(offset_x + int(x * random.randint(15,25) / 20),offset_y,duration=0.28)offset_y += random.randint(-9,0)pyautogui.moveTo(offset_x + int(x * random.randint(17,23) / 20),offset_y,duration=random.randint(20,31) / 100)offset_y += random.randint(0,8)pyautogui.moveTo(offset_x + int(x * random.randint(19,21) / 20),offset_y,duration=random.randint(20,40) / 100)offset_y += random.randint(-3,3)pyautogui.moveTo(x + offset_x + random.randint(-3,3),offset_y,duration=0.5 + random.randint(-10,10) / 100)offset_y += random.randint(-2,2)pyautogui.moveTo(x + offset_x + random.randint(-2,2),offset_y,duration=0.5 + random.randint(-3,3) / 100)pyautogui.mouseUp()time.sleep(random.randint(2,5))

6.定义实现登录函数

代码如下:

#实现登录
def startLogin():time.sleep(random.randint(2,5))browser.maximize_window()#点击账户登录login=browser.find_element_by_xpath('//div[@class="login-tab login-tab-r"]/a')login.click()time.sleep(1)#获取账号和密码doc=getLoginText()user=browser.find_element_by_id('loginname')user.send_keys(doc[0])upass=browser.find_element_by_id('nloginpwd')upass.send_keys(doc[1])time.sleep(2)#点击登录# loginSubmit=browser.find_element_by_xpath('//div[@class="login-btn"]/a')loginSubmit=browser.find_element_by_id('loginsubmit')time.sleep(1)loginSubmit.click()time.sleep(random.randint(2,5))#调用滑动函数LoginSlide()#获取当前url并进行判断是否为登录网页nowurl=browser.current_urlprint('现在是Login界面?:'+str(str(nowurl).startswith('https://passport.jd.com/')))if(str(nowurl).startswith('https://passport.jd.com/uc/login')):#若滑块失败,则再调用滑动函数LoginSlide()browser.minimize_window()time.sleep(random.randint(2,5))

7.定义文件保存函数

代码如下:

#将爬取内容保存到文件函数
def save(content):with open('C:\\Users\\Administrator\\Desktop\\goods.txt', 'a', encoding='utf-8')as f:f.writelines(content)

8.定义爬取函数

代码如下:

#定义信息爬取函数
#keyindex是当前keyword的下标
#index是当前搜索结果的页数
def paser_index(keyindex,index):time.sleep(random.randint(5,10))#若跳转到了登录界面,重新登录,并从上次断点继续爬取nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):return continueRun(index,keyindex)#跳转到页面最下面,使页面完全加载60条browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(random.randint(5,10))#获取htmletreeselector = etree.HTML(browser.page_source)#定位到商品listitems = selector.xpath('//div[@class="gl-i-wrap"]')#获取当前页数index= selector.xpath('//div[@id="J_topPage"]/span/b/text()')index_max= selector.xpath('//div[@id="J_topPage"]/span/i/text()')#循环将每个商品处理后写入文件for item in items:price= '/'.join('%s' %id for id in item.xpath('./div[@class="p-price"]/strong/i/text()') )title= ''.join('%s' %id for id in item.xpath('./div[@class="p-name p-name-type-2"]/a/em/text()') )desc= '/'.join('%s' %id for id in item.xpath('./div[@class="p-name p-name-type-2"]/a/i/text()') )comment= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-commit"]//a/text()') )shop= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-shop"]/span/a/text()') )shop_tag= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-icons"]/i/text()') )info = [title,price,desc,comment,shop,shop_tag]print(info)save('\n'+','.join('%s' %x for x in info))#打印当前参数print('index:'+str(index)+' index_max:'+str(index_max)+' keyindex:'+str(keyindex)+' keyword:'+str(keyword[keyindex])+' keyword_len:'+str(len(keyword)-1))#若当前页码不是最大值,则随机等待后点击下一页if(int(index[0])<int(index_max[0])):#进行翻页操作,index+1time.sleep(random.randint(2,5))temp=int(index[0])*2+1#执行翻页的js脚本browser.execute_script("SEARCH.page("+str(temp)+", true);")

9.定义首次运行函数

代码如下:

#定义首次运行函数,用于首次执行(从keyword[0]第一页开始)
def fristRun(urls):browser.get(urls)#判定需不需要登录nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):print('正在登录账号……')startLogin()print('正式开始执行爬虫')for i in range(0,len(keyword)):#搜索关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[i])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))for j in range(1,int(index_max)+1):paser_index(i,j)browser.quit()

10.定义继续运行函数

代码如下:

#定义继续运行函数,用于程序意外停止后继续上次进度运行
def continueRun(urls,keyindex,index):browser.get(urls)#判定需不需要登录nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):print('正在登录账号……')startLogin()print('正式开始执行爬虫')#搜索上次的关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[keyindex])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#跳转到指定页面temp=int(index*2-1)browser.execute_script("SEARCH.page("+str(temp)+", true);")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))#先将上次搜索词的剩余页面爬取for k in range(index,int(index_max)+1):paser_index(keyindex,k)#再从上次搜索词的后面循环爬取for i in range(keyindex+1,len(keyword)):#搜索关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[i])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))#循环爬取页面for j in range(1,int(index_max)+1):paser_index(i,j)browser.quit()

11.定义主函数

代码如下:

if __name__ == '__main__':print('-----------开始-----------')#定义要打开的网页urlurls='https://passport.jd.com/uc/login' #京东登录界面# urls='https://www.jd.com/' #京东首页# fristRun(urls) #首次运行使用这个,将下面的两句注释掉#程序意外中断后,想继续运行时,使用这两句,将上面的fristRun()注释掉continueRun(urls,4,11) #根据中断前控制台输出的参数,设置参数(keyindex,index)print('-----------结束-----------')

三、代码整体展示

完整代码如下:

import time
from urllib import request
import cv2
from selenium import webdriver
# from random import random
import pyautogui
from numpy import random
from lxml import etree
#版本特性:在5.0基础上,将各种点击方法该为直接执行按钮的onclick属性调用的js脚本#设置搜索关键词(根据需要修改)
keyword=['显卡','cpu','主板','内存','硬盘','散热器','机箱','外设','显示器','整机','笔记本电脑','平板','手机']#对浏览器驱动进行设置
option=webdriver.ChromeOptions()
# option.add_argument('headless') #隐藏浏览器窗口(因为登录滑块需要使用鼠标,只能改为最小化)
option.add_argument("disable-blink-features=AutomationControlled") #去掉chrome的webdriver痕迹
browser = webdriver.Chrome(options=option)#获取密码函数
def getLoginText():f=open('D:\\PyCode\\txt\\JDLogin.txt', 'r', encoding='utf-8')temp = f.readlines()doc=[]#去除元素中的换行转义for t in temp:t=t.strip('\n')doc.append(t)return doc#获取图片信息,返回最佳匹配位置
def findPic(target="img1.jpg", template="img2.png"):# 读取图片target_rgb = cv2.imread(target)# 图片灰度化target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)# 读取模块图片template_rgb = cv2.imread(template, 0)# 匹配模块位置res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)# 获取最佳匹配位置value = cv2.minMaxLoc(res)# 返回最佳X坐标return value[2][0]#验证码滑动
def LoginSlide():#获取滑块图像target = browser.find_element_by_xpath('//div[@class="JDJRV-bigimg"]/img')template = browser.find_element_by_xpath('//div[@class="JDJRV-smallimg"]/img')# 获取模块的url路径src1 = target.get_attribute("src")src2 = template.get_attribute("src")# 下载图片(参数二可以用 filename=‘想存放的目录位置+文件名’ 设置图片保存位置,只设置文件名默认保存在和代码统一目录下)request.urlretrieve(src1,"img1.jpg")request.urlretrieve(src2,"img2.png")x = findPic()w1 = cv2.imread('img1.jpg').shape[1]w2 = target.size['width']x = x / w1 * w2# 按钮坐标(可以打开浏览器自己量一下,这里是1080p下大概坐标)offset_x,offset_y = 1169,484# pyautogui库操作鼠标指针pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))pyautogui.mouseDown()offset_y += random.randint(9,19)pyautogui.moveTo(offset_x + int(x * random.randint(15,25) / 20),offset_y,duration=0.28)offset_y += random.randint(-9,0)pyautogui.moveTo(offset_x + int(x * random.randint(17,23) / 20),offset_y,duration=random.randint(20,31) / 100)offset_y += random.randint(0,8)pyautogui.moveTo(offset_x + int(x * random.randint(19,21) / 20),offset_y,duration=random.randint(20,40) / 100)offset_y += random.randint(-3,3)pyautogui.moveTo(x + offset_x + random.randint(-3,3),offset_y,duration=0.5 + random.randint(-10,10) / 100)offset_y += random.randint(-2,2)pyautogui.moveTo(x + offset_x + random.randint(-2,2),offset_y,duration=0.5 + random.randint(-3,3) / 100)pyautogui.mouseUp()time.sleep(random.randint(2,5))#实现登录
def startLogin():time.sleep(random.randint(2,5))browser.maximize_window()#点击账户登录login=browser.find_element_by_xpath('//div[@class="login-tab login-tab-r"]/a')login.click()time.sleep(1)#获取账号和密码doc=getLoginText()user=browser.find_element_by_id('loginname')user.send_keys(doc[0])upass=browser.find_element_by_id('nloginpwd')upass.send_keys(doc[1])time.sleep(2)#点击登录# loginSubmit=browser.find_element_by_xpath('//div[@class="login-btn"]/a')loginSubmit=browser.find_element_by_id('loginsubmit')time.sleep(1)loginSubmit.click()time.sleep(random.randint(2,5))#调用滑动函数LoginSlide()#获取当前url并进行判断是否为登录网页nowurl=browser.current_urlprint('现在是Login界面?:'+str(str(nowurl).startswith('https://passport.jd.com/')))if(str(nowurl).startswith('https://passport.jd.com/uc/login')):#若滑块失败,则再调用滑动函数LoginSlide()browser.minimize_window()time.sleep(random.randint(2,5))#将爬取内容保存到文件函数
def save(content):with open('C:\\Users\\Administrator\\Desktop\\goods.txt', 'a', encoding='utf-8')as f:f.writelines(content)#定义信息爬取函数
#keyindex是当前keyword的下标
#index是当前搜索结果的页数
def paser_index(keyindex,index):time.sleep(random.randint(5,10))#若跳转到了登录界面,重新登录,并从上次断点继续爬取nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):return continueRun(index,keyindex)#跳转到页面最下面,使页面完全加载60条browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(random.randint(5,10))#获取htmletreeselector = etree.HTML(browser.page_source)#定位到商品listitems = selector.xpath('//div[@class="gl-i-wrap"]')#获取当前页数index= selector.xpath('//div[@id="J_topPage"]/span/b/text()')index_max= selector.xpath('//div[@id="J_topPage"]/span/i/text()')#循环将每个商品处理后写入文件for item in items:price= '/'.join('%s' %id for id in item.xpath('./div[@class="p-price"]/strong/i/text()') )title= ''.join('%s' %id for id in item.xpath('./div[@class="p-name p-name-type-2"]/a/em/text()') )desc= '/'.join('%s' %id for id in item.xpath('./div[@class="p-name p-name-type-2"]/a/i/text()') )comment= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-commit"]//a/text()') )shop= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-shop"]/span/a/text()') )shop_tag= '/'.join('%s' %id for id in item.xpath('.//div[@class="p-icons"]/i/text()') )info = [title,price,desc,comment,shop,shop_tag]print(info)save('\n'+','.join('%s' %x for x in info))#打印当前参数print('index:'+str(index)+' index_max:'+str(index_max)+' keyindex:'+str(keyindex)+' keyword:'+str(keyword[keyindex])+' keyword_len:'+str(len(keyword)-1))#若当前页码不是最大值,则随机等待后点击下一页if(int(index[0])<int(index_max[0])):#进行翻页操作,index+1time.sleep(random.randint(2,5))temp=int(index[0])*2+1#执行翻页的js脚本browser.execute_script("SEARCH.page("+str(temp)+", true);")#定义首次运行函数,用于首次执行(从keyword[0]第一页开始)
def fristRun(urls):browser.get(urls)#判定需不需要登录nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):print('正在登录账号……')startLogin()print('正式开始执行爬虫')for i in range(0,len(keyword)):#搜索关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[i])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))for j in range(1,int(index_max)+1):paser_index(i,j)browser.quit()#定义继续运行函数,用于程序意外停止后继续上次进度运行
def continueRun(urls,keyindex,index):browser.get(urls)#判定需不需要登录nowurl=browser.current_urlif(str(nowurl).startswith('https://passport.jd.com/')):print('正在登录账号……')startLogin()print('正式开始执行爬虫')#搜索上次的关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[keyindex])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#跳转到指定页面temp=int(index*2-1)browser.execute_script("SEARCH.page("+str(temp)+", true);")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))#先将上次搜索词的剩余页面爬取for k in range(index,int(index_max)+1):paser_index(keyindex,k)#再从上次搜索词的后面循环爬取for i in range(keyindex+1,len(keyword)):#搜索关键词key=browser.find_element_by_id('key')key.clear()key.send_keys(keyword[i])#执行搜索的js脚本browser.execute_script("search('key');return false;")time.sleep(random.randint(2,5))#获取页面最大值index_max=browser.find_element_by_xpath('//div[@id="J_topPage"]/span/i').textprint("当前页面最大值为:"+str(index_max))#循环爬取页面for j in range(1,int(index_max)+1):paser_index(i,j)browser.quit()if __name__ == '__main__':print('-----------开始-----------')#定义要打开的网页urlurls='https://passport.jd.com/uc/login' #京东登录界面# urls='https://www.jd.com/' #京东首页# fristRun(urls) #首次运行使用这个,将下面的两句注释掉#程序意外中断后,想继续运行时,使用这两句,将上面的fristRun()注释掉continueRun(urls,4,11) #根据中断前控制台输出的参数,设置参数(keyindex,index)print('-----------结束-----------')

总结

参考了不少爬虫代码修修改改好几天才搞好(菜的抠脚,刚开始用递归写,结果老爆栈)
主要以selenium库为核心的玩具级爬虫
京东商品会显示不少重复的商品,鉴于爬取量不大,可以使用set()对文本去重,简单的清洗重要参数为空的行后食用

目前未解决的问题:
①登录模块,有一定概率点不到登录按钮,导致运行失败(不管是通过xpath还是id都有概率点了不跳出滑动验证……);
②单线程爬取太慢,平均一个关键词要30分钟才爬完(可以再调低些等待时间,目前中间极少需要重新登录)
  a.强制等待函数积累间隔时间长
  b.程序太快了会被强制退出登录(即便是这样的慢速,时间长了也会被强制退出登录)
  c.单位时间内请求过多登录时需要短信验证码,或扫描登录
③有些商品信息获取不到,例如title中带有京东国际标签的产品,无法获取title,price,desc,comment(原因不明)
④不能全程隐藏窗口执行,登录需要最大化,并且鼠标与被控制浏览器之间不能有遮挡物(被强制登出后会突然最大化开始登录,幸好请求速度慢频率低)
⑤偶尔会卡在当前关键词的最大页,一直循环好久,不自动换关键词 或 换关键词失败(原因不明) 改搜索点击为执行js搜索函数,解决此问题
⑥占用c盘缓存空间,win10会把浏览过的网页或其他记录保存在C:\Users\Administrator\AppData\Local\Temp\目录下,所以要定期清理缓存……

Python爬虫—爬取京东商品信息(自动登录,换关键词,换页)相关推荐

  1. python爬虫爬取京东商品评价_python爬取京东商品信息及评论

    ''' 爬取京东商品信息: 功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取 ...

  2. python爬虫爬取京东商品评价_网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  3. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

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

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

  5. layui获取input信息_python爬虫—用selenium爬取京东商品信息

    python爬虫--用selenium爬取京东商品信息 1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Hea ...

  6. Python动态爬虫爬取京东商品评论

    Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...

  7. python制作爬虫爬取京东商品评论教程

    python制作爬虫爬取京东商品评论教程 作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计 ...

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

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

  9. Selenium介绍--实例爬取京东商品信息与图片

    目录 一.Selenium简介 二.Selenium组成 三.Selenium特点 四.Selenium的基本使用 1.下载所用浏览器需要的驱动 2.创建项目并导入依赖 3.入门 3.代码演示 五.实 ...

  10. Day06,selenium的剩余用法、万能登录破解和爬取京东商品信息,及破解极验滑动验证码...

    一.自动登录抽屉新热榜 from selenium import webdriver import timedriver = webdriver.Chrome(r'D:\BaiduNetdiskDow ...

最新文章

  1. html滑块数值怎么显示,显示HTML5滑块值旁边的百分比
  2. matlab绘制立体条形图
  3. mysql 移植 azure_初码-Azure系列-记一次MySQL数据库向Azure的迁移
  4. php动态加载js,动态加载script文件的两种方法_javascript技巧
  5. UML图大科普 :14种UML图图例详解
  6. python -lambda表达式的用法
  7. 视觉SLAM笔记(61) 单目稠密建图
  8. duilib开发(六):基本控件介绍
  9. 项目管理-软件:国内外知名IT项目管理工具【Worktile、PingCode、Jira、Clarizen、禅道】
  10. 【软件设计师中级】设计模式之原型模式学习笔记(c++)
  11. Maximum Likelihood 最大似然估计
  12. excel中输入身份证号后三位变成0怎么办
  13. ERROR: Check hive‘s usability failed, please check the status of your cluster问题解决
  14. 80后的青春里,总有散不去的周杰伦
  15. 计算机cfd教学,CFD数值模拟过程
  16. 中国史上战斗力最强的5支部队(冷兵器时代)
  17. JAVA 面试知识点(个人总结)
  18. 计算机组成原理(静态随机存取存取器)
  19. js实现图片的延迟加载
  20. Oracle 手工锁表

热门文章

  1. logstash全量导入es
  2. 2pin接口耳机_耳机插头接线示意图
  3. windows10电脑发现不了网络计算机,Win10电脑无法开启网络发现怎么解决?
  4. windows10如何设置电脑的固定IP地址
  5. 《AI·未来》 ---- 读书笔记
  6. Centos虚拟机使用virt-manager创建虚拟机
  7. 加拿大布兰登大学计算机专业,加拿大布兰登大学有哪些专业?
  8. Skype 8.34 Windows7-64bit Ubuntu 16.04安装试验
  9. 51单片机电子琴设计
  10. jquery查子元素