Python实训day4
'''2 爬取豆瓣TOP250电影信息3 4 主页:5 第一页:6 https://movie.douban.com/top250?start=0&filter=7 第二页:8 https://movie.douban.com/top250?start=25&filter=9 第三页: 10 https://movie.douban.com/top250?start=50&filter= 11 第十页: 12 https://movie.douban.com/top250?start=225&filter= 13 GET 14 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36 15 16 re正则: 17 # 电影详情页url、图片链接、电影名称、电影评分、导演、主演、电影上映时间、评价人数、简介 18 <div class="item">.*?href="(.*?)">.*?src="(.*?)" class="">.*?<span class="title">(.*?)</span>.*?<div class="bd">.*?导演:(.*?)<br>(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价<span class="inq">(.*?)</span> 19 ''' 20 import requests 21 import re 22 23 24 headers = { 25 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36' 26 } 27 base_url = 'https://movie.douban.com/top250?start={}&filter=' 28 29 n = 0 30 for line in range(10): 31 print() 32 url = base_url.format(n) 33 print(type(n)) 34 n += 25 35 print(url) 36 # 1、往豆瓣TOP250发送请求获取响应数据 37 response = requests.get(url, headers=headers) 38 39 # print(response.text) 40 41 # 2、通过正则解析提取数据 42 # 电影详情页url、图片链接、电影名称、电影评分、评价人数 43 movie_content_list = re.findall( 44 # 正则规则 45 # 电影评分、评价人数、 46 47 '<div class="item">.*?href="(.*?)">.*?src="(.*?)" class="">.*?<span class="title">(.*?)</span>.*?<div class="bd">.*?导演:(.*?)<br>(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价.*?<span class="inq">(.*?)</span>', 48 49 # 解析文本 50 response.text, 51 52 # 匹配模式 53 re.S) 54 55 for movie_content in movie_content_list: 56 # 解压赋值每一部电影 57 detail_url, movie_jpg, name, daoyan, timer, point, num, desc = movie_content 58 data = f'电影名称:{name},详情页url:{detail_url}, 图片url:{movie_jpg},导演:{daoyan},上映时间:{timer}, 评分: {point}, 评价人数: {num}, 简介:{desc} \n' 59 print(data) 60 61 # 3、保存数据,把电影信息写入文件中 62 with open('豆瓣top250.txt', 'a', encoding='utf-8') as f: 63 f.write(data)
今日内容: 1、requests之POST请求 2、requests高级用法 3、selenium基本使用 4、万能破解登录 一、requests之POST请求
1 '''2 post请求访问github3 请求url:4 https://github.com/session5 请求方式:6 POST7 请求头:8 # 上一次请求从哪里来9 Referer:https://github.com/login10 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.3611 请求体:12 只有POST请求才会有请求体。13 commit: 登入14 utf8: ✓15 authenticity_token: 1ZoPGWJBCBMW/IzHozPRLB1UJBfw0/SnHtGeqbKULG1Xb1YPxFhKmKKFPs9meYV0IdjGKnXYqTH9nASzPNYOnw==16 login: shendongnian17 password: 111118 webauthn-support: supported19 20 '''21 import requests22 import re23 24 # 一、访问login页面获取token信息25 '''26 请求url:27 https://github.com/login28 请求方式:29 GET30 响应头:31 Set-Cookie:32 请求头:33 Cookie:34 User-Agent:35 '''36 headers = {37 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'38 }39 40 response = requests.get(url='https://github.com/login', headers = headers)41 # print(response.text)42 # 把login页返回的cookies信息转换成字典43 login_cookies = response.cookies.get_dict()44 45 authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',response.text,re.S)[0]46 47 print(authenticity_token)48 49 # 二、往sessionurl发送POST请求50 '''51 post请求登录github52 请求url:53 https://github.com/session54 55 请求方式:56 POST57 58 请求头:59 # 上一次请求从哪里来60 Referer:https://github.com/login61 Cookie:...62 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.3663 64 请求体:65 只有POST请求才会有请求体。66 commit: 登入67 utf8: ✓68 authenticity_token: 1ZoPGWJBCBMW/IzHozPRLB1UJBfw0/SnHtGeqbKULG1Xb1YPxFhKmKKFPs9meYV0IdjGKnXYqTH9nASzPNYOnw==69 login: shendongnian70 password: 111171 webauthn-support: supported72 73 '''74 # 拼接头信息75 headers2 = {76 'Referer':'https://github.com/login',77 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'78 }79 80 81 # cookies = {82 # 'Cookies':''83 # }84 85 # 拼接请求体信息86 from_data = {87 "commit":"登入",88 "utf8": "✓",89 "authenticity_token":authenticity_token,90 "login":"tankjam",91 "password":"kermit46709394",92 "webauthn-support":"unsupported"93 }94 95 # 往session地址发送post请求96 # 携带请求头、请求体、login页的cookie信息97 98 response2 = requests.post(url='https://github.com/session',data=from_data,headers = headers2,cookies=login_cookies)99 print(response2.status_code) 100 # print(response2.text) 101 with open('github.html','w',encoding='utf-8') as f: 102 f.write(response2.text)
二、requests响应
1 '''2 post请求访问github3 请求url:4 https://github.com/session5 请求方式:6 POST7 请求头:8 # 上一次请求从哪里来9 Referer:https://github.com/login10 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.3611 请求体:12 只有POST请求才会有请求体。13 commit: 登入14 utf8: ✓15 authenticity_token: 1ZoPGWJBCBMW/IzHozPRLB1UJBfw0/SnHtGeqbKULG1Xb1YPxFhKmKKFPs9meYV0IdjGKnXYqTH9nASzPNYOnw==16 login: shendongnian17 password: 111118 webauthn-support: supported19 20 '''21 import requests22 import re23 24 # 一、访问login页面获取token信息25 '''26 请求url:27 https://github.com/login28 请求方式:29 GET30 响应头:31 Set-Cookie:32 请求头:33 Cookie:34 User-Agent:35 '''36 headers = {37 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'38 }39 40 response = requests.get(url='https://github.com/login', headers = headers)41 # print(response.text)42 # 把login页返回的cookies信息转换成字典43 login_cookies = response.cookies.get_dict()44 45 authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',response.text,re.S)[0]46 47 print(authenticity_token)48 49 # 二、往sessionurl发送POST请求50 '''51 post请求登录github52 请求url:53 https://github.com/session54 55 请求方式:56 POST57 58 请求头:59 # 上一次请求从哪里来60 Referer:https://github.com/login61 Cookie:...62 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.3663 64 请求体:65 只有POST请求才会有请求体。66 commit: 登入67 utf8: ✓68 authenticity_token: 1ZoPGWJBCBMW/IzHozPRLB1UJBfw0/SnHtGeqbKULG1Xb1YPxFhKmKKFPs9meYV0IdjGKnXYqTH9nASzPNYOnw==69 login: shendongnian70 password: 111171 webauthn-support: supported72 73 '''74 # 拼接头信息75 headers2 = {76 'Referer':'https://github.com/login',77 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'78 }79 80 81 # cookies = {82 # 'Cookies':''83 # }84 85 # 拼接请求体信息86 from_data = {87 "commit":"登入",88 "utf8": "✓",89 "authenticity_token":authenticity_token,90 "login":"tankjam",91 "password":"kermit46709394",92 "webauthn-support":"unsupported"93 }94 95 # 往session地址发送post请求96 # 携带请求头、请求体、login页的cookie信息97 98 response2 = requests.post(url='https://github.com/session',data=from_data,headers = headers2,cookies=login_cookies)99 print(response2.status_code) 100 # print(response2.text) 101 with open('github.html','w',encoding='utf-8') as f: 102 f.write(response2.text)
三、requests高级用法
1 import requests2 3 https = http + ssl(携带证书)4 5 6 #证书验证(大部分网站都是https)7 import requests8 # 如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终端9 response = requests.get('https://www.xiaohuar.com')10 print(response.status_code)11 12 # 改进1:去掉报错,但是会报警告13 # import requests14 # response = requests.get('https://www.xiaohuar.com', verify=False) # True携带证书 False不携带证书15 # # 不验证证书,报警告,返回20016 # print(response.status_code)17 18 # 改进2:去掉报错,并且去掉警报信息19 import requests20 import urllib321 urllib3.disable_warnings() # 关闭警告22 response = requests.get('https://www.xiaohuar.com', verify=False)23 print(response.status_code)24 25 # 改进3:加上证书26 # 很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书27 # 知乎\百度等都是可带可不带28 # 有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站29 import requests30 import urllib331 # urllib3.disable_warnings() # 关闭警告32 # 伪代码33 response = requests.get(34 'https://www.xiaohuar.com',35 # verify=False,36 # /path/server.crt证书的存放目录,/path/key37 cert=('/path/server.crt', '/path/key'))38 print(response.status_code)39 40 41 42 '''43 超时设置44 '''45 46 超时设置47 两种超时:float or tuple48 timeout=0.1 # 代表接收数据的超时时间49 timeout=(0.1,0.2) # 0.1代表链接超时 0.2代表接收数据的超时时间50 51 import requests52 53 response = requests.get('https://www.baidu.com',54 timeout=0.0001)55 56 print()57 58 代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)59 import requests60 proxies={61 # 带用户名密码的代理,@符号前是用户名与密码62 'http':'http://tank:123@localhost:9527',63 'http':'http://localhost:9527',64 'https':'https://localhost:9527',65 }66 response=requests.get('https://www.12306.cn',67 proxies=proxies)68 69 print(response.status_code)70 71 72 '''73 爬取西刺免费代理:74 1.访问西刺免费代理页面75 2.通过re模块解析并提取所有代理76 3.通过ip测试网站对爬取的代理进行测试77 4.若test_ip函数抛出异常代表代理作废,否则代理有效78 5.利用有效的代理进行代理测试79 80 <tr class="odd">81 <td class="country"><img src="//fs.xicidaili.com/images/flag/cn.png" alt="Cn"></td>82 <td>112.85.131.99</td>83 <td>9999</td>84 <td>85 <a href="/2019-05-09/jiangsu">江苏南通</a>86 </td>87 <td class="country">高匿</td>88 <td>HTTPS</td>89 <td class="country">90 <div title="0.144秒" class="bar">91 <div class="bar_inner fast" style="width:88%">92 93 </div>94 </div>95 </td>96 <td class="country">97 <div title="0.028秒" class="bar">98 <div class="bar_inner fast" style="width:97%">99 100 </div> 101 </div> 102 </td> 103 104 <td>6天</td> 105 <td>19-05-16 11:20</td> 106 </tr> 107 re: 108 <tr class="odd">(.*?)</td>.*?<td>(.*?)</td> 109 110 ''' 111 import requests 112 import re 113 import time 114 115 HEADERS = { 116 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', 117 } 118 119 120 def get_index(url): 121 time.sleep(1) 122 response = requests.get(url, headers=HEADERS) 123 return response 124 125 126 def parse_index(text): 127 ip_list = re.findall('<tr class="odd">.*?<td>(.*?)</td>.*?<td>(.*?)</td>', text, re.S) 128 for ip_port in ip_list: 129 ip = ':'.join(ip_port) 130 yield ip 131 132 def test_ip(ip): 133 print('测试ip: %s' % ip) 134 try: 135 proxies = { 136 'https': ip 137 } 138 139 # ip测试网站 140 ip_url = 'https://www.ipip.net/' 141 142 # 使用有效与无效的代理对ip测试站点进行访问,若返回的结果为200则代表当前测试ip正常 143 response = requests.get(ip_url, headers=HEADERS, proxies=proxies, timeout=1) 144 145 if response.status_code == 200: 146 print(f'有用的ip:{ip}') 147 return ip 148 149 # 若ip代理无效则抛出异常 150 except Exception as e: 151 print(e) 152 153 # 使用代理爬取nba 154 def spider_nba(good_ip): 155 url = 'https://china.nba.com/' 156 157 proxies = { 158 'https': good_ip 159 } 160 161 response = requests.get(url, headers=HEADERS, proxies=proxies) 162 print(response.status_code) 163 print(response.text) 164 165 166 if __name__ == '__main__': 167 base_url = 'https://www.xicidaili.com/nn/{}' 168 169 for line in range(1, 3677): 170 ip_url = base_url.format(line) 171 172 response = get_index(ip_url) 173 174 # 解析西刺代理获取每一个ip列表 175 ip_list = parse_index(response.text) 176 177 # 循环每一个ip 178 for ip in ip_list: 179 # print(ip) 180 181 # 对爬取下来的ip 进行测试 182 good_ip = test_ip(ip) 183 184 if good_ip: 185 # 真是代理,开始测试 186 spider_nba(good_ip) 187 188 189 # 认证设置 190 ''' 191 登录网站时,会弹出一个框,要求你输入用户名与密码(类似于alert),此时无法进入html页面,待授权通过后才能进入html页面。 192 193 Requests模块为我们提供了多种身份认证方式,包括基本身份认证等... 194 195 其原理指的是通过输入用户名与密码获取用户的凭证来识别用户,然后通过token对用户进行授权。 196 基本身份认证: 197 HTTP Basic Auth是HTTP1.0提出的认证方式。客户端对于每一个realm,通过提供用户名和密码来进行认证的方式当认证失败时,服务器收到客户端请求,返回401。 198 199 ''' 200 import requests 201 # 通过访问github的api来测试 202 url = 'https://api.github.com/user' 203 HEADERS = { 204 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', 205 } 206 207 # 测试1,失败返回401 208 response = requests.get(url, headers=HEADERS) 209 print(response.status_code) # 401 210 print(response.text) 211 ''' 212 打印结果: 213 { 214 "message": "Requires authentication", 215 "documentation_url": "https://developer.github.com/v3/users/#get-the-authenticated-user" 216 } 217 ''' 218 219 # 测试2,通过requests.auth内的HTTPBasicAuth进行认证,认证成功返回用户信息 220 from requests.auth import HTTPBasicAuth 221 response = requests.get(url, headers=HEADERS, auth=HTTPBasicAuth('tankjam', 'kermit46709394')) 222 print(response.text) 223 224 225 # 测试3,通过requests.get请求内的auth参数默认就是HTTPBasicAuth,认证成功返回用户信息 226 # response = requests.get(url, headers=HEADERS, auth=('tankjam', 'kermit46709394')) 227 # print(response.text) 228 ''' 229 打印结果: 230 { 231 "login": "TankJam", 232 "id": 38001458, 233 "node_id": "MDQ6VXNlcjM4MDAxNDU4", 234 "avatar_url": "https://avatars2.githubusercontent.com/u/38001458?v=4", 235 "gravatar_id": "", 236 "url": "https://api.github.com/users/TankJam", 237 "html_url": "https://github.com/TankJam", 238 "followers_url": "https://api.github.com/users/TankJam/followers", 239 "following_url": "https://api.github.com/users/TankJam/following{/other_user}", 240 "gists_url": "https://api.github.com/users/TankJam/gists{/gist_id}", 241 "starred_url": "https://api.github.com/users/TankJam/starred{/owner}{/repo}", 242 "subscriptions_url": "https://api.github.com/users/TankJam/subscriptions", 243 "organizations_url": "https://api.github.com/users/TankJam/orgs", 244 "repos_url": "https://api.github.com/users/TankJam/repos", 245 "events_url": "https://api.github.com/users/TankJam/events{/privacy}", 246 "received_events_url": "https://api.github.com/users/TankJam/received_events", 247 "type": "User", 248 "site_admin": false, 249 "name": "kermit", 250 "company": null, 251 "blog": "", 252 "location": null, 253 "email": null, 254 "hireable": null, 255 "bio": null, 256 "public_repos": 6, 257 "public_gists": 0, 258 "followers": 0, 259 "following": 0, 260 "created_at": "2018-04-02T09:39:33Z", 261 "updated_at": "2019-05-14T07:47:20Z", 262 "private_gists": 0, 263 "total_private_repos": 1, 264 "owned_private_repos": 1, 265 "disk_usage": 8183, 266 "collaborators": 0, 267 "two_factor_authentication": false, 268 "plan": { 269 "name": "free", 270 "space": 976562499, 271 "collaborators": 0, 272 "private_repos": 10000 273 } 274 } 275 ''' 276 277 278 上传文件 279 import requests 280 281 # 上传文本文件 282 files1 = {'file': open('user.txt', 'rb')} 283 # files参数是POST请求固定参数 284 response = requests.post('http://httpbin.org/post', files=files1) 285 print(response.status_code) # 200 286 print(response.text) # 200 287 288 # 上传图片文件 289 files2 = {'jpg': open('一拳超人.jpg', 'rb')} 290 response = requests.post('http://httpbin.org/post', files=files2) 291 print(response.status_code) # 200 292 print(response.text) # 200 293 294 # 上传视频文件 295 files3 = {'movie': open('love_for_GD.mp4', 'rb')} 296 297 response = requests.post('http://httpbin.org/post', files=files3) 298 print(response.status_code) # 200 299 print(response.text) # 200
四、selenium基本使用
1 '''2 selenium模块讲解3 一、什么是selenium?4 最初是一个自动化测试工具。可以使用它帮我们驱动浏览器自动去执行某些自定义好的操作。例如在页面中执行JS代码、跳过登录验证。5 (selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。6 selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。7 selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等...进而拿到网页渲染之后的结果,可支持多种浏览器。)8 9 二、为什么要使用selenium?10 1、优点:11 要使用requests模块登录需要分析大量的复杂通信流程,使用selenium可以轻松跳过登录验证。12 2、缺点:13 浏览器会加载css、js、图片、视频...数据,爬虫效率相比requests模块要低。14 15 三、如何使用?16 下载selenium模块:17 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium18 下载浏览器驱动:19 http://npm.taobao.org/mirrors/chromedriver/2.38/20 '''21 22 # selenium之第一次测试23 from selenium import webdriver # 用来驱动浏览器的24 25 # 调用得到一个动作链对象,破解华东验证码的时候用的,可以拖动图片26 from selenium.webdriver import ActionChains27 28 # 按照什么方式查找属性,By.ID,By.CSS_SELECTOR,By.Class29 from selenium.webdriver.common.by import By30 31 from selenium.webdriver.common.keys import Keys # 键盘按键操作32 33 # 和下面WebDriverWait一起用的,EC 是expected_conditions的别名34 from selenium.webdriver.support import expected_conditions as EC35 36 # 等待页面加载某些元素37 from selenium.webdriver.support.wait import WebDriverWait38 39 import time40 41 # 通过谷歌浏览器驱动打开谷歌浏览器42 # chrome = webdriver.Chrome(r'chromedriver.exe的绝对路径')43 chrome = webdriver.Chrome(r'D:\Python\chromedriver_win32\chromedriver') # 括号内输入chromedriver.exe的绝对路径44 '''45 # chromedriver.exe存放于python解释器的Scripts文件夹中46 47 # chrome是一个驱动对象48 chrome = webdriver.Chrome()49 '''50 '''51 实例152 '''53 54 # 若try出现异常55 try:56 # 往tank博客主页发送get请求57 # chrome.get('https://www.cnblogs.com/kermitjam')58 59 # 参数1:驱动对象 参数2:等待时间60 wait = WebDriverWait(chrome, 10)61 62 # 1、访问百度63 chrome.get('https://www.baidu.com/')64 65 # 2、查找input输入框66 # 调用EC的presence_of_element_located()67 input_tag = wait.until(EC.presence_of_element_located((By.ID, "kw")))68 # 此处可以写一个元组69 # 参数1:查找属性的方式70 # 参数2:属性的名字71 72 # 3、搜索一拳超人73 input_tag.send_keys('一拳超人')74 75 # 4、按键盘回车键76 input_tag.send_keys(Keys.ENTER)77 78 time.sleep(3)79 80 # 无论发生什么都会关闭浏览器81 finally:82 # 关闭浏览器83 chrome.close()84 85 86 87 '''88 实例289 '''90 try:91 # 往tank博客主页发送get请求92 # chrome.get('https://www.cnblogs.com/kermitjam')93 94 # 参数1:驱动对象 参数2:等待时间95 wait = WebDriverWait(chrome, 10)96 97 # 1、访问百度98 chrome.get('https://www.jd.com/')99 100 # 2、查找input输入框 101 input_tag = wait.until(EC.presence_of_element_located((By.ID, "key"))) 102 103 # 3、搜索唐诗三百首 104 input_tag.send_keys('唐诗三百首') 105 106 # 4、根据class属性名称查找标签 107 search_button = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'button'))) 108 109 # 5、点击搜索按钮 110 search_button.click() 111 112 time.sleep(3) 113 114 # 无论发生什么都会关闭浏览器 115 finally: 116 # 关闭浏览器 117 chrome.close()
五、selenium之基本选择器
1 from selenium import webdriver2 import time3 4 5 '''6 隐式等待7 '''8 # 获取驱动对象9 driver = webdriver.Chrome(r'D:\Python\chromedriver_win32\chromedriver') 10 11 # 获取 12 try: 13 # 显式等待:等待某个元素加载 14 # 参数1:驱动对象 参数2:等待时间 15 # wait = WebDriverWait(chrome, 10) 16 17 driver.get('https://china.nba.com') 18 19 # 隐式等待:等待页面所有元素加载 20 driver.implicitly_wait(10) 21 news_tag = driver.find_element_by_class_name('nav-news') 22 # 获取标签对象 23 print(news_tag) 24 # 获取标签名字 25 print(news_tag.ag_name) 26 time.sleep(10) 27 28 29 finally: 30 chrome.close() 31 32 33 34 ''' 35 ===============所有方法=================== 36 element是查找一个标签 37 elements是查找所有标签 38 39 1、find_element_by_link_text 通过链接文本去找 40 2、find_element_by_id 通过id去找 41 3、find_element_by_class_name 42 4、find_element_by_partial_link_text 43 5、find_element_by_name 44 6、find_element_by_css_selector 45 7、find_element_by_tag_name 46 ''' 47 try: 48 49 # 往百度主页发送请求 50 driver.get('https://www.baidu.com/') 51 driver.implicitly_wait(10) 52 53 # 1、find_element_by_link_text 通过链接文本去找 54 # 根据登录 55 send_tag = driver.find_element_by_link_text('登录') 56 send_tag.click() 57 58 59 # 2、find_element_by_partial_link_text 通过局部文本查找a标签 60 login_button = driver.find_element_by_partial_link_text('登') 61 login_button.click() 62 time.sleep(1) 63 64 # 3、find_element_by_class_name 根据class属性名查找 65 login_tag = driver.find_element_by_class_name('tang-pass-footerBarULogin') 66 login_tag.click() 67 time.sleep(1) 68 69 # 4、find_element_by_name 根据name属性查找 70 username = driver.find_element_by_name('userName') 71 username.send_keys('15055303102') 72 time.sleep(1) 73 74 75 # 5、find_element_by_id 通过id属性名查找 76 password = driver.find_element_by_id('TANGRAM__PSP_10__password') 77 password.send_keys('shenjin981002') 78 time.sleep(1) 79 80 # 6、find_element_by_css_selector 根据属性选择器查找 81 # 根据id查找登录按钮 82 login_submit = driver.find_element_by_css_selector('#TANGRAM__PSP_10__submit') 83 # login_submit = driver.find_element_by_css_selector('.pass-button-submit') 84 login_submit.click() 85 86 # 7、find_element_by_tag_name 根据标签名称查找标签 87 div = driver.find_element_by_tag_name('div') 88 print(div.tag_name) 89 90 time.sleep(10) 91 92 93 finally: 94 driver.close()
今日作业: 1、整理课堂笔记并编写博客 2、爬取快代理(参考爬取西刺代理代码) https://www.kuaidaili.com/free/ 3、熟悉selenium模块,敲上课例子 4、自动登录抽屉新热榜
转载于:https://www.cnblogs.com/wangtianen/p/11061250.html
Python实训day4相关推荐
- Python—实训day4—爬虫案例3:贴吧图片下载
6 xpath 首先需要安装Google的Chrome浏览器 6.1 安装xpath插件 把 xpath_helper_2_0_2.crx 修改后缀名为 xpath_helper_2_0_2.rar. ...
- 大学python实训总结-千锋Python实训总结 学好基础才能走的更远
时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...
- Python实训day14pm【Python网络爬虫综合大作业-参考解析】
Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...
- Python实训day14am【Python网络爬虫综合大作业-答辩】
Python实训-15天-博客汇总表 实训总结: 由浅入深的了解了python语言应用: 编写了很多案例,完成了发作业,提升了编程思路和能力: 了解了行业现状,认识到企业对人才的要求,去除焦虑,对后续 ...
- Python实训day13am【Python网络爬虫综合大作业PPT】
Python实训-15天-博客汇总表 今天上午大家抓紧时间继续完成实训报告和PPT,有问题我会在群里跟大家说明, 暂时不用上线直播了. 实训结束后,我会在博客上发布网络爬虫综合大作业题目及解析.
- Python实训day12pm【答辩要求、定时器】
Python实训-15天-博客汇总表 目录 1.答辩安排 2.定时器 1.答辩安排 下午安排: 今天尽量地完成整个项目: 明天完成实训报告,制作小答辩PPT: 后天答辩. PPT要求: 时长5分钟左右 ...
- Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】
Python实训-15天-博客汇总表 目录 1.HTML页面设计 2.生成每个城市的HTML页面 2.1.HTML页面代码(weatherTemplate.html) 2.2.实例代码-动态生成htm ...
- Python实训day11pm【大作业简略解析】
Python实训-15天-博客汇总表 目录 1.课堂笔记 2.群消息 3.代码 3.1.demo1 3.2.demo2 1.课堂笔记 大作业题目思路引导: 题目1:定时爬取每个地级市的实时天气状况.存 ...
- Python实训day11am【大作业思路梳理】
Python实训-15天-博客汇总表 定时任务:定时任务框架APScheduler学习详解 - 小学弟- - 博客园
最新文章
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #6 使用localmodconfig缩短编译时间...
- Spring 的优秀工具类盘点
- 【Centos 8】【Centos 7】【Docker】 添加 DockerHub 的镜像地址
- python转化成excel_python转换excel成py文件
- 问题 | list(set(list))如何实现顺序不变
- 经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法
- 2019 徐州icpc网络赛 E. XKC's basketball team
- 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
- ROS笔记(6) ROS通讯机制
- Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
- Unix 目录结构是怎么由来的?
- jquery遍历json与数组方法总结
- AR Camera开发记录(一) -- Rajawali的使用
- crt导出服务器文件,CRT中将服务器中生成的awr报告用会话日志提取到本地
- 20160213为王伟写的挪点号,也可以叫它为文字避让
- Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
- operate new、delete new和placement new
- mysql 判断邮箱_Java 判断电话号码邮箱代码示例讲解
- android 汉字 转 拼音首字母大写,传入汉字字符串, 返回大写拼音首字母
- rxjava背压_rxjava3——背压