Python爬虫—爬取京东商品信息(自动登录,换关键词,换页)
目录
- 前言
- 一、需要的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爬虫—爬取京东商品信息(自动登录,换关键词,换页)相关推荐
- python爬虫爬取京东商品评价_python爬取京东商品信息及评论
''' 爬取京东商品信息: 功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取 ...
- python爬虫爬取京东商品评价_网络爬虫-爬取京东商品评价数据
前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...
- go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...
利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...
- python爬虫爬商品库存_python爬虫实践——爬取京东商品信息
1 ''' 2 爬取京东商品信息:3 请求url:4 https://www.jd.com/5 提取商品信息:6 1.商品详情页7 2.商品名称8 3.商品价格9 4.评价人数10 5.商品商家11 ...
- layui获取input信息_python爬虫—用selenium爬取京东商品信息
python爬虫--用selenium爬取京东商品信息 1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Hea ...
- Python动态爬虫爬取京东商品评论
Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...
- python制作爬虫爬取京东商品评论教程
python制作爬虫爬取京东商品评论教程 作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计 ...
- python爬取京东商品信息代码_爬取京东商品信息
利用 BeautifulSoup + Requests 爬取京东商品信息并保存在Excel中 一.查看网页信息 打开京东商城,随便输入个商品,就选固态硬盘吧 先看看 URL 的规律,可以看到我们输入的 ...
- Selenium介绍--实例爬取京东商品信息与图片
目录 一.Selenium简介 二.Selenium组成 三.Selenium特点 四.Selenium的基本使用 1.下载所用浏览器需要的驱动 2.创建项目并导入依赖 3.入门 3.代码演示 五.实 ...
- Day06,selenium的剩余用法、万能登录破解和爬取京东商品信息,及破解极验滑动验证码...
一.自动登录抽屉新热榜 from selenium import webdriver import timedriver = webdriver.Chrome(r'D:\BaiduNetdiskDow ...
最新文章
- html滑块数值怎么显示,显示HTML5滑块值旁边的百分比
- matlab绘制立体条形图
- mysql 移植 azure_初码-Azure系列-记一次MySQL数据库向Azure的迁移
- php动态加载js,动态加载script文件的两种方法_javascript技巧
- UML图大科普 :14种UML图图例详解
- python -lambda表达式的用法
- 视觉SLAM笔记(61) 单目稠密建图
- duilib开发(六):基本控件介绍
- 项目管理-软件:国内外知名IT项目管理工具【Worktile、PingCode、Jira、Clarizen、禅道】
- 【软件设计师中级】设计模式之原型模式学习笔记(c++)
- Maximum Likelihood 最大似然估计
- excel中输入身份证号后三位变成0怎么办
- ERROR: Check hive‘s usability failed, please check the status of your cluster问题解决
- 80后的青春里,总有散不去的周杰伦
- 计算机cfd教学,CFD数值模拟过程
- 中国史上战斗力最强的5支部队(冷兵器时代)
- JAVA 面试知识点(个人总结)
- 计算机组成原理(静态随机存取存取器)
- js实现图片的延迟加载
- Oracle 手工锁表