爬取京东 百度 知乎

爬取京东数据商品(单页)

关于延时等待

有时候我们在访问网站数据的时候 加载需要一定的时间 没有加载完全的情况下代码极其容易报错 此时需要我们的等待页面数据加载完毕 如何精确等待?
bro.implicitly_wait(10) #延时等待十秒(对于正常网速十秒足够) 

关于控制浏览器鼠标滚轮下滑

window.document.body.scrollHeight  # 当前页面屏幕高度
window.scrollTo  # 滚动到指定位置
import time #导入时间模块
from selenium import webdriver # 导入自动控制浏览器
from selenium.webdriver.common.keys import Keys #导入键盘模拟输入
from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('京东商品数据',0)
wb1.append(['商品图','价格','详情','链接','销量','店铺名','店铺链接'])
bro=webdriver.Chrome() #使用谷歌浏览器打开
bro.get('https://www.jd.com/') #打开京东首页
bro.implicitly_wait(10) #延时等待 加载完成即可执行命令
key=bro.find_element_by_id('key') #寻找输入栏所对应的标签找id字段
choice=input('请输入需要搜索的内容')
key.send_keys(choice) #输入搜索内容
key.send_keys(Keys.ENTER) # 按下enter键进入商品页
for i in range(0,12000,1000): # 使用js代码控制鼠标滚轮向下移动, 总共长度为8000 每一次滚1000的长度 并且延时等待0.5
    bro.execute_script('window.scrollTo(0,%s)'%i)
    time.sleep(0.5)
list=bro.find_elements_by_css_selector('li.gl-item') #获取整个下拉完成后的页面li标签
# print(len(list))
for li in list: #循环获取list中的li标签
    img_list=li.find_element_by_css_selector('div.p-img a img') #获取图片标签
    img_src=img_list.get_attribute('src') #获取图片标签内部属性
    """内部src属性内部存在懒加载现象"""
    if not img_src: # 懒加载的图片标签内部需加上https:构成图片链接
        img_src='https:'+img_list.get_attribute('data-lazy-img')
    # print(img_src)
    price_list=li.find_element_by_css_selector('div.p-price strong') # 获取价格所在标签
    price=price_list.text #获取价格标签内部的文本内容
    src_list=li.find_element_by_css_selector('div.p-name a em') #获取商品描述所在标签
    src=src_list.text #获取商品描述标签内部的文本内容
    link_list=li.find_element_by_css_selector('div.p-name a') #获取商品链接所在标签
    link=link_list.get_attribute('href') #获取标签内部href属性
    commit_list=li.find_element_by_css_selector('div.p-commit strong a') #获取评论所在标签
    commit=commit_list.text# 获取评论标签内部的文本内容
    shop_list=li.find_element_by_css_selector('div.p-shop span a') #获取店铺名所在标签
    shop=shop_list.text# 获取店铺名所在标签中的文本内容
    shop_link=li.find_element_by_css_selector('div.p-shop span a') #获取店铺链接所在的标签
    shoplink=shop_link.get_attribute('href')  # 获取标签内部的店铺链接
    wb1.append([img_src,price,src,link,commit,shop,shoplink])
wb.save('京东商品.xlsx')
bro.close()

知乎登录案例

1.电脑端知乎不登陆是无法直接访问首页的
2.network监控发送登录请求体数据为加密
    加密的代码关键字:encrypt
    解密的代码关键字:decrypt
3.搜索关键字encrypt通过断点调试查看到内部真实数据
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https://www.zhihu.com/signin?next=%2F

百度自动登录

from selenium import webdriver
import time

# 1.使用谷歌浏览器访问百度首页
bro = webdriver.Chrome()
bro.get('https://www.baidu.com/')
# 2.查找页面上的登录按钮
login_tag = bro.find_element_by_id('s-top-loginbtn')
# 3.点击登录按钮
time.sleep(0.5)
login_tag.click()
'''延迟等待:页面数据有时候需要时间加载 但是代码不会自动等'''
time.sleep(3)
# 4.查找点击短信登录按钮
message_tag = bro.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem')
message_tag.click()
time.sleep(0.5)
# 5.查找手机号输入框并填写内容
phone_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsPhone')
phone_tag.send_keys(13585515712)
time.sleep(0.5)
# 6.查找发送验证码按钮并点击
btn_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsTimer')
btn_tag.click()
time.sleep(0.5)
# 7.查找并点击登录按钮
submit_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsSubmit')
submit_tag.click()
time.sleep(0.5)

bro.close()

 

posted @ 2021-10-07 15:31  查无此人cxc  阅读(95)  评论(0)    收藏  举报