python爬虫5

文章介绍了如何使用Selenium进行无头浏览器操作,包括配置headless模式、webdriver的使用、网页抓取、GET和POST请求,以及与requests库的对比,展示了在Python中进行网页自动化和数据抓取的实践示例。
摘要由CSDN通过智能技术生成

1.selenium交互

无页面浏览器速度更快

#配置好的自己不用管
from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options.add_argument('‐‐headless')

chrome_options.add_argument('‐‐disable‐gpu')

# path是你自己的chrome浏览器的文件路径

path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

chrome_options.binary_location = path

browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get('http://www.baidu.com/')


from selenium import webdriver

#这个是浏览器自带的 不需要我们再做额外的操作
#配置的封装

from selenium.webdriver.chrome.options import Options

def share_browser():

         #初始化 chrome_options = Options()

         chrome_options.add_argument('‐‐headless')

        chrome_options.add_argument('‐‐disable‐gpu')

        #浏览器的安装路径 打开文件位置

        #这个路径是你谷歌浏览器的路径

        path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

        chrome_options.binary_location = path

        browser = webdriver.Chrome(chrome_options=chrome_options)

        return browser
#封装的调用

from handless import share_browser

browser = share_browser()

browser.get('http://www.baidu.com/')

browser.save_screenshot('handless1.png') 
#1.练习
from selenium import webdriver
path='C:\\Users\\nsy\\Downloads\\chromedriver-win64\\chromedriver.exe'
browswe=webdriver.Chrome(path)
url='http://www.baidu.com'
browser.get(url)
input=browser.find_element_by_id('su')
#获取标签属性
print(input.get_attribute('class'))
#获取标签名字
print(input.tag_name)
#获取元素文本
a=browser.find(elempent_by_link_text('新闻'))
print(a.text)
#2.练习
from selenium import webdriver
#创建浏览器对象
path='chromedriver.exe'
browser.get(url)
import time
time.sleep(2)
#获取文本框对象
input=browser.find_element_by_id('kw')
#在文本框中输入周杰伦
input.send_keys('周杰伦')
time.sleep(2)
#获取百度一下的按钮
button=browser.find_element_by_id('su')
#点击按钮
button.click()
time.sleep(2)
#滑倒底部
js_bottom='document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(2)
#获取下一页按钮
next.click()
time.sleep(2)
#退出
browser.quit()
#3.练习hadless selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def share_browser():
      chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # path是你自己的chrome浏览器的文件路径
    path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
    chrome_options.binary_location = path

    browser = webdriver.Chrome(chrome_options=chrome_options)
    return browser
browser share_browser()
url ='https://www.baidu.com'
browser.get(url)
    
#1.练习request的使用
url='http://www.baidu.com'
response=requests.get(url=url)
# 一个类型和六个属性
# Response类型
# print(type(response))

# 设置响应的编码格式
# response.encoding = 'utf-8'

# 以字符串的形式来返回了网页的源码
# print(response.text)

# 返回一个url地址
# print(response.url)

# 返回的是二进制的数据
# print(response.content)

# 返回响应的状态码
# print(response.status_code)
#返回的是响应头
print(response.headers)
#2.request get请求
# urllib
# (1) 一个类型以及六个方法
# (2)get请求
# (3)post请求   百度翻译
# (4)ajax的get请求
# (5)ajax的post请求
# (6)cookie登陆 微博
# (7)代理


# requests
# (1)一个类型以及六个属性
# (2)get请求
# (3)post请求
# (4)代理
# (5)cookie  验证码
import requests
url='https://www.baidu.com/s'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
data={
    'wd':'北京'}
#url 请求资源路径
#params 参数
#kwargs 字典
response=requests.get(url=url,params=data,headers=headers)
content=response.text
print(content)

# 总结:
# (1)参数使用params传递
# (2)参数无需urlencode编码
# (3)不需要请求对象的定制
# (4)请求资源路径中的?可以加也可以不加


#3.练习
import requests
url='https://fanyi.baidu.com/sug'
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
data={'kw':'eye'}
#url请求地址
#data请求参数
#kwargs 字典
response=requests.post(url=url,data=data,headers=headers)
content=response.text
import json
obj=json.loads(content,encoding='utf-8')
print(obj)

# 总结:
# (1)post请求 是不需要编解码
# (2)post请求的参数是data
# (3)不需要请求对象的定制
#4.练习
import requests
url='http://www.baidu.com/s?'
headers={
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
}
data={
    'wd':'ip'}
proxey={'http':'212.129.251.55:16816'}
response=requests.get(url=url,params=data,headers=headers,proxies=proxy)
content=response.text
with open('daili.html','w',encoding='utf-8')as fp:
    fp.write(content)

#5.练习 超级鹰的使用方法方法封装好了,都是现成的,用户名什么改改就行了,不用管

#!/usr/bin/env python
# coding:utf-8

import requests
from hashlib import md5

class Chaojiying_Client(object):

    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf8')
        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
            'user': self.username,

            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()


if __name__ == '__main__':
	chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001')	#用户中心>>软件ID 生成一个替换 96001
	im = open('a.jpg', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
	print(chaojiying.PostPic(im, 1902))	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值