一、代理使用
1、requests中设置代理
proxies = {‘http’:‘ip:端口号’,‘https’:‘ip:端口号’}
-
获取代理
def ips() url = 代理地址 result = requests.get(url).text if result[0] == '{': return None ips_list = result.slipt('\n')[:-1] return ips_list
-
使用代理
proxies = {'http':ips_list[0],'https':ips_list[0]} response = request.get(url,proxies = proxies )
2.selenium设置代理
设置对象.add_argument(’–proxy-server=http://代理ip:端口’)
-
获取代理
def ips() url = 代理地址 result = requests.get(url).text if result[0] == '{': return None ips_list = result.slipt('\n')[:-1] return ips_list
-
使用代理
# 创建设置对象 option = webdriver.ChromeOptions() # 添加代理 option.add_argument(f'--proxy-server=http://{ips_list[0]}') # 创建浏览对象 b = webdriver.Chrome(options = option)
二、selenium控制页面滚动
1、JavaScript的滚动页面的代码
# 只滑动一次
window.scrollTo(x,y) # x表示横向滑动,y表示竖向滑动
#滑动多次
# 一点一点的滚动: 500 -> 修改成每次需要滚动的距离,单位是像素; 1000 -> 每次滚动的时间间隔,单位是毫秒
heghit = 500
t = setInterval(function(){
if(heghit >= document.body.scrollheghit){
clearInterval(t)
}
window.scrollTo(0,heghit)
heghit += 500
},1000)
# setInterval定时执行程序,clearInterval取消定时执行
2、在selenium中石像鬼页面滚动
# 滚动到底部
浏览对象.execute_scrip("window.scrollTo(0,ducument.body.scrollHeghit)")
#缓慢滑动
浏览对象.execute_scrip("""
heghit = 500
t = setInterval(function(){
if(heghit >= document.body.scrollheghit){
clearInterval(t)
}
window.scrollTo(0,heghit)
heghit += 500
},1000)
""")
三、bs解析数据
Beautifulsoup是基于css选择器的解析库
1、准备数据(一般是通过requests或者selenium爬取到)
2、创建BeautifulSoup解析器对象
BeautifulSoup(解析对象,解析器类型)
解析对象:一般是html格式字符串
解析器类型:lxml(常用)、html、xml、html5lib
soup = BeautifulSoup(content,'lxml')
3、获取标签 - 通过css选择器
解析器对象.select(css选择器) - 在整个页面中找,返回的是列表,元素是标签
标签对象.select(css选择器) - 在标签中找,返回的是列表,元素是标签
result = soup.select('p') # 标签名选择
print(result)
result = soup.select('#f1')
print(result)
ol = soup.select('#o1')[0] # 标签对象
lis = soup.select('#o1>li')
4.嵌套写法
嵌套写法: 标签1.标签2.标签3… -> 获取标签1中第一个标签2中的第一个标签3…
5.按照指定属性值查找标签
result = soup.find_all(attrs={'tag': 'hot'}) ---返回的是列表
print(result)
6.获取内容和属性
标签.string - 获取双标签的文字内容(注意:被获取的标签中不能有子标签,否则结果是None) 返回字符串
标签.contents - 获取双标签的内容(包括文字内容和子标签) 返回列表元素是字符串和标签
标签.get_text() — 返回字符串,返回标签内容及其子标签的内容
b1 = soup.select('#f1')[0]
print(b1.string) # 我是font1
b2 = soup.select('#f2')[0]
print('===:', b2.string) # ===: None
print(b1.contents) # ['我是font1']
print(b2.contents, b2.contents[-1].string) # ['我是font2 ', <a href="#">abc</a>] abc
print(b1.get_text()) # 我是font1
print(b2.get_text()) # 我是font2 abc
7.获取标签属性
标签对象.attrs[属性名]
b3 = soup.body.div.a
print(b3.attrs['href']) # https://www.baidu.com