1. urllib模块介绍

  • python自带的一个基于爬虫的模块。
  • 作用:可以使用代码模拟浏览器发起请求。
  • 经常使用到的子模块:request,parse。
  • 使用流程:
    • 指定URL。
    • 针对指定的URL发起了一个请求。
    • 获取页面数据。
    • 持久化储存。

2. 爬取搜狗首页的页面数据

# 需求:爬取搜狗首页的页面数据
import urllib.request # 1. 指定url
url = 'https://www.sogou.com/' # 2. 发起请求:urlopen可以根据指定的url发起请求,且返回一个响应对象(byte类型)
response = urllib.request.urlopen(url) # 3. 获取页面数据:read函数返回的就是响应对象中存储的页面数据
page_text = response.read() # 4. 持久化存储
with open('./sougou.html','wb') as fp:
fp.write(page_text)
print('写入数据成功')

3. 爬取指定词条所对应的页面数据

import urllib.request
import urllib.parse # 1. 指定url
url = 'https://www.sogou.com/web?query=' # url特性:url不可以存在非ASCII编码的字符数据
word = urllib.parse.quote('人民币')
url += word # 有效的url # 2. 发起请求
response = urllib.request.urlopen(url=url) # 3. 获取页面数据
page_text = response.read()
with open('rmb.html','wb') as fp:
fp.write(page_text)

4.反爬和反反爬

  • 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据。
  • User-Agent(UA):请求载体的身份标识,正常是浏览器。
  • 反反爬机制:伪装爬虫程序请求的UA,例如伪装成谷歌浏览器或火狐浏览器的身份标识。
mport urllib.request

url = 'https://www.baidu.com/'

# UA伪装
# 1. 自制定一个请求对象
headers = {
# 存储任意的请求头信息
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
# 该请求对象的UA进行了成功的伪装
request = urllib.request.Request(url=url,headers=headers) # 2. 针对自制定的请求对象发起请求
reponse = urllib.request.urlopen(request) print(reponse.read())

5. post请求

import json
import urllib.request
import urllib.parse # 一、 指定URL
url = 'https://fanyi.baidu.com/sug' # 对post请求携带的参数进行处理。流程:
# 1. 将请求参数封装到字典中
data = {
'kw':'西瓜'
} # 2. 使用parse中的urlencode进行编码处理
data = urllib.parse.urlencode(data) # 3. 将步骤2的编码结果转换成byte类型
data = data.encode() # 二、发起post请求:urlopen函数的data参数表示的就是经过处理之后的post请求携带的参数
response = urllib.request.urlopen(url=url,data=data) page_text = response.read() with open('translate.json','ab') as fp:
fp.write(page_text)

最新文章

  1. BZOJ 1799 同类分布
  2. 随部分div增高总的div也随着增高
  3. 犀牛书的实例代码:给对象添加freeze, hide, 查询descriptors
  4. repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色
  5. FlyCapture2 Qt5 MinGW Configuration
  6. linux扩大swap交换空间
  7. poj 1144 Network(无向图求割顶数)
  8. Windows Azure存储容器私有,公共容器,公共Blob的区别
  9. 全国省市级联数据sql语句 mysql版
  10. php url字符转义操作
  11. 【POJ2186】受牛仰慕的牛
  12. javascript 常用api
  13. [SignalR2] 认证和授权
  14. ServletRegistrationBean的源码摘要
  15. CodeForces #549 Div.2 C Queen
  16. JAVA程序设计的第一次作业
  17. pycharm License server激活
  18. [转] 浅析JavaScript设计模式——发布-订阅/观察者模式
  19. JS设计模式——单例模式剖析
  20. Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】

热门文章

  1. IsBackground对线程的重要作用
  2. php token
  3. Gulp工具常用插件
  4. Eclipse常用设置和快捷键
  5. SpringBoot常用应用程序属性
  6. Struts2_HelloWorld_7_1
  7. senium
  8. SPICE简史
  9. polyfill 一个解决兼容的绝佳方案
  10. LDAP 在ubuntu14.04下的安装配置install and configure