15天学会爬虫 第三天

爬虫

第三天

1.三元运算符

a = b if b else c # 如果b为真,a=b,否则a=c

if b:
    a = b
else:
    a = c

2.requests处理cookies

  1. 将cookie字符串直接放入headers中

  2. 准备cookie字典,在requests请求实传入cookies参数中

    cookies_dict = {}
    requests.get(url,headers=headers,cookies=cookies_dict)
    

3.js分析

  1. 观察变化
  2. 定位js
    • 找到触发请求的标签,在标签的eventlistener中找到方法,定位js
    • 全局搜索url的关键字
  3. 执行js
  4. python代码模拟js

4.requests获取cookie

requests.utils.dict_from_cookiejar:把cookiejar对象转化为字典

import requests

url = "http://www.baidu.com"
response = requests.get(url)
print(type(response.cookies)) # <class 'requests.cookies.RequestsCookieJar'>

cookies = requests.utils.dict_from_cookiejar(response.cookies)
print(cookies)

5.requests处理证书

国内部分网站虽然采用HTTPS协议,但证书是自行构建的,并非由权威机构颁发的,使用google浏览器访问时,会提示以下错误:

15天学会爬虫 第三天

利用requests访问这类网站时,会报错如下:

requests.exceptions.SSLError: HTTPSConnectionPool(host='sls.cdb.com.cn', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

对此,如果需要抓取这类网站时,可以在get或者post请求中,添加一个verify参数,不去校验证书即可

url = "https://sls.cdb.com.cn/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
}
response = requests.get(url=url, headers=headers,verify=False)

print(response.status_code)

此时,可能会有警告信息,但不会报错了