Python爬虫——爬虫请求模块

1.urllib.request模块

1.1 版本

  • python2 :urllib2、urllib
  • python3 :把urllib和urllib2合并,urllib.request

1.2 常用的方法

  • urllib.request.urlopen(“网址”) 作用 :向网站发起一个请求并获取响应
  • 字节流 = response.read()
  • 字符串 = response.read().decode(“utf-8”)
  • urllib.request.Request(“网址”,headers=“字典”) urlopen()不支持重构User-Agent
import urllib.request

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

headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
}

req = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(req)
# 字节流数据
print(type(response.read()))                    #<class 'bytes'>
# 字符串数据
print(type(response.read().decode('utf-8')))    #<class 'str'>

1.3 响应对象

  • read() 读取服务器响应的内容
  • getcode() 返回HTTP的响应码
  • geturl() 返回实际数据的URL(防止重定向问题)
import urllib.request

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

headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
}

req = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(req)

# 获取响应内容
print(response.read())          #b'...'
# 获取响应码
print(response.getcode())       #200
# 获取实际数据的url
print(response.geturl())        #https://www.baidu.com/

2. urllib.parse模块

2.1 常用方法

  • urlencode(字典)
  • quote(字符串) (这个里面的参数是个字符串)
import urllib.parse

words = {'wd':'我爱学习'}
words = urllib.parse.urlencode(words)
print(words)        #wd=%E6%88%91%E7%88%B1%E5%AD%A6%E4%B9%A0

my_words = urllib.parse.quote('我爱学习')
print(my_words)     #%E6%88%91%E7%88%B1%E5%AD%A6%E4%B9%A0

3. 请求方式

  • GET 特点 :查询参数在URL地址中显示
  • POST
    • 在Request方法中添加data参数
      urllib.request.Request(url,data=data,headers=headers)
    • data :表单数据以bytes类型提交,不能是str
# GET方式,如百度翻译
# Request URL: https://www.baidu.com/s?ie=UTF-8&wd=%E6%88%91%E7%88%B1%E5%AD%A6%E4%B9%A0
# Request Method: GET

# POST方式 ,如:有道翻译
# Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
# Request Method: POST
import urllib.request
import urllib.parse

# 大概的使用格式如下:
headers ={...}
data = {...}
data = urllib.parse.urlencode(data)
# 把data转换成字节
data = bytes(data,'utf-8')
url = '...'
req = urllib.request.Request(url,data=data,headers=headers)

4. requests模块

4.1 安装

  • pip install requests
  • 在开发工具中安装
'''第一种'''
# 打开cmd命令提示符,输入以下指令
pip install request
'''第二种'''
# 1.在pycharm中打开File→setting的Project:xxx下的Project Interpreter
# 2.再点击右边窗口的‘+’号搜索requests,点击Install Package即可

4.2 request常用方法

  • requests.get(网址)
import requests

url = 'https://www.baidu.com/'
response = requests.get(url)

print(response)         #<Response [200]>

4.3 响应对象response的方法

  • response.text 返回unicode格式的数据(str)
  • response.content 返回字节流数据(二进制)
  • response.content.decode(‘utf-8’) 手动进行解码
  • response.url 返回url
  • response.encode() = ‘编码’
import requests

url = 'https://www.baidu.com/'
response = requests.get(url)

# print(response.text)                      #一大堆而且有乱码的东西
# print(response.content)                   #返回字节流数据,并且没有乱码
# print(response.content.decode('utf-8'))   #返回一大堆但是没有乱码的东西
# print(response.url)                       #https://www.baidu.com/

response.encoding = 'utf-8'
print(response.text)                        #结果和response.content.decode('utf-8')的一样

4.4 requests模块发送 POST请求

import requests

#大致格式如下:
data = '...'		#需要提交的表单数据
headers = '...'		#请求访问的请求头
url = '...'			#想要访问的网页地址
res = requests.post(url,data=data,headers=headers)

4.5 requests设置代理

  • 使用requests添加代理只需要在请求方法中(get/post)传递proxies参数就可以了
  • 代理网站
    西刺免费代理IP:http://www.xicidaili.com/
    快代理:http://www.kuaidaili.com/
    代理云:http://www.dailiyun.com/
import requests
# request设置代理
proxy = {
        'http':'代理ip地址:端口地址'
}
url  = 'http://www.httpbin.org/ip'
res = requests.get(url,proxies=proxy)
print(res.text)
# 若能正常使用,会出现以下结果
# {
#   "origin": "代理ip地址:端口地址"
# }

4.6 cookie

  • cookie :通过在客户端记录的信息确定用户身份
  • HTTP是一种无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。

4.7 session

  • session :通过在服务端记录的信息确定用户身份 这里这个session就是一个指的是会话
暂时没有找到合适的案例,后面再进行修改

4.8 处理不信任的SSL证书

什么是SSL证书?

  • SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
采集城市公交、地铁站点和线路数据可以帮助我们更好地了解城市公共交通系统的运作情况,为城市交通规划和出行提供参考。下面是一个基于Python爬虫示例,可以用来采集城市公交、地铁站点和线路数据。 1. 确定爬取的网站 首先需要确定你想要采集的城市公交、地铁站点和线路数据所在的网站。常见的网站有: - 公交线路查询网站,如高德地图、百度地图等; - 公交、地铁运营公司的官方网站; - 公交、地铁相关的开放数据平台,如城市公共交通数据开放平台等。 2. 分析网站结构 在确定了采集的网站后,需要分析网站的结构,了解需要爬取的数据所在的页面、标签和属性等信息。可以使用开发者工具来帮助分析网站结构。 3. 使用Python爬虫代码采集数据 在分析了网站结构后,可以使用Python编写爬虫代码来采集数据。其中需要用到的模块包括: - requests:用于发送HTTP请求,获取网页内容; - BeautifulSoup4:用于解析HTML页面,提取所需数据; - pandas:用于数据处理和存储。 下面是一个示例代码,可以爬取高德地图上北京市公交线路数据: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 获取公交线路列表页面 url = 'https://ditu.amap.com/bus/beijing' r = requests.get(url) # 解析HTML页面,获取所有公交线路名称及其链接 soup = BeautifulSoup(r.text, 'html.parser') lines = soup.find_all('a', {'class': 'bus-tit'}) # 遍历每个公交线路,获取站点信息 data = [] for line in lines: line_name = line.text line_url = 'https:' + line['href'] r = requests.get(line_url) soup = BeautifulSoup(r.text, 'html.parser') stations = soup.find_all('div', {'class': 'station-name'}) station_names = [s.text for s in stations] data.append({'line': line_name, 'stations': station_names}) # 将数据保存为CSV文件 df = pd.DataFrame(data) df.to_csv('bus_lines.csv', index=False) ``` 运行以上Python代码后,将会在当前文件夹下生成一个名为bus_lines.csv的CSV文件,其中包含了所有北京市公交线路及其站点信息。 以上示例代码仅为一个简单的示例,实际应用中可能需要更复杂的爬虫代码来处理数据。同时,需要注意合法使用爬虫,遵守相关法律法规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值