#处理中文乱码
import requests
from lxml import etree
from urllib import request
url = 'http://pic.netbian.com/4kqiche/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
response = requests.get(url=url,headers=headers)  #响应
#手动设置响应数据的编码
# response.encoding = 'utf-8'
page_text = response.text
tree = etree.HTML(page_text)  #实例化
li_list = tree.xpath('//div[@class="slist"]/ul/li')
for li in li_list:
    img_src = li.xpath('./a/img/@src')[0]  
    img_name = li.xpath('./a/b/text()')[0]
    # 通用性
    img_name = img_name.encode('iso-8859-1').decode('gbk')
    request.urlretrieve(url="http://pic.netbian.com"+img_src,filename='./图片/%s.jpg'%img_name)   #相对路径
#   request.urlretrieve(url="http://pic.netbian.com"+img_src,filename=r'C:\spider\day01\图片\%s.jpg'%img_name) #绝对路径
    print(img_name,'0k')
print('OK')
- 爬虫的分类
    - 通用爬虫:
    - 聚焦爬虫:
    - 增量式:
- 爬取图片的两种方式
    - 使用requests
    - urllib模块request中urlretrieve
- 数据解析的基本原理
    - 标签的定位
    - 取文本或取属性
- xpath解析原理
    - 实例化etree对象,且将源码加载到该对象中
    - 使用xpath方法结合着xpath表达式进行标签定位和数据提取
        - 属性定位[@attrName="value"]
        - 索引定位:[1]
        - /  //
        - 取文本: /text()  //text()
        - 取属性:/@attrName
- etree对象实例化的方式
    - 本地加载:parse
    - 网络加载:HTML
- bs4解析原理
    - .tagName 单数
    - find(属性定位) 单数    find('tagName',attrName="value")
    - find_all 复数
- Beautiful对象实例化方式  本地/网络   soup.div  soup()
    
- 面试题:如何爬取携带标签的指定页面内容
    bs4 text()/get_text()/string() 
1 连接池报警 请求头改 Connection: keep-alive 为close
             User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
2 代理IP 在IP被封禁后
3 每次请求之间sleep进行间隔等待
模拟登陆 -- 爬取基于某些用户的用户信息
验证码识别:云打码平台  http://www.yundama.com/
使用流程:
    注册
    登陆:
      普通用户:
        查询剩余提分(充值)  http://www.yundama.com/price.html
      开发者用户:
        创建软件:我的软件-》添加新软件(ID,秘钥)
        下载示例代码:开发文档-》点此下载:云打码接口DLL-》PythonHTTP示例下载        
代理:代理服务器
  - 快代理
  - 西祠代理
  - goubanjia
匿名度:
  透明:对方服务器知道你使用了代理ip也知道你的真实ip
  匿名:知道你使用了代理ip但是不知道你的真实ip
  高匿:什么都不知道
类型:
  http:只可以发起http请求
  https:只可以发起https的请求
# 代理IP服务器    快代理 西祠代理 goubanjia(推荐)
import requests
url = 'http://www.baidu.com/s?wd=ip'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
page_text = requests.get(url=url,headers=headers,proxies={'http':'117.127.0.202:80'}).text
with open('./ip.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

# 构建代理池
http_list = [
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'}
]
https_list = [
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'}
]

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
cookie的应用和处理
- cookie:服务器端记录客户端的相关状态
- 处理cookie的方式:
    - 手动处理:不建议
    - 自动处理:回话对象Session,该对象可以像requests模块一样进行网络请求的发送(get,post)。
         session进行的请求发送可以自动携带和处理cookie。

 

 

 

 

# 简单的百度自动化处理  chromedriver.exe是个软件
from
selenium import webdriver # web驱动 显式的自动化浏览器操作 from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.baidu.com') sleep(2) # 标签定位 tag_input = bro.find_element_by_id('kw') tag_input.send_keys('人民币') btn = bro.find_element_by_id('su') btn.click() sleep(2) bro.quit() # 退出
from selenium import webdriver  # 显式的Js滚轮操作
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://xueqiu.com')
sleep(5)
# 执行js实现滚轮向下滑动
js = "window.scrollTo(0,document.body.scrollHeight)"
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
# 加载更多的处理
a_tag = bro.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[1]/div[2]/div[2]/a')
a_tag.click()
sleep(5)
# 获取当前浏览器页面数据(动态数据)
bro.page_source  # 可print

bro.quit() # 退出
# 一款无可视化的浏览器(免安装)  基于谷歌无头
# 谷歌无头浏览器
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options)
bro.get('https://www.baidu.com')
sleep(2)
bro.save_screenshot('1.png') #拍照截屏
#标签定位
tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民币')
sleep(2)

btn = bro.find_element_by_id('su')  # 找见 百度一下 按钮
btn.click()  # 点击进行搜索
sleep(2)

print(bro.page_source)  # 打印页面资源
bro.quit()  #退出

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄