爬虫中的urllib库

        1.什么是urllib库?

      urllib库是Python中的一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。urllib库包含4个模块:urllib.request(HTTP请求模块)、urllib.parse(解析模块)、urllib.error(异常处理模块)、urllib.robotparser(用于解析robots.txt文件,应用较少)。

       urlopen()函数是urllib.request模块中的一个重要函数,可以用来发送HTTP请求并获取响应。它的参数包括一个URL字符串,以及可选的请求头、请求体、超时时间等。使用urlopen()函数,您可以发送GET、POST等类型的请求,并获取服务器的响应。除了urlopen()函数外,urllib库还提供了其他一些实用的功能,如urlretrieve()函数用于下载网页上的文件、ProxyHandler处理器用于设置代理等。总的来说,urllib库是一个简单易用的网络请求库,提供了丰富的功能和API,方便开发者进行网络编程和数据抓取。但需要注意的是,urllib库无法处理动态网页、cookies和会话管理等问题,对于更复杂的需求,可能需要使用其他更强大的库如requests等。

     2. urllib库有哪些优点和缺点?

urllib库是Python中用于处理网络请求的常用库之一,它具有以下优点:

  1. 简单易用:urllib库提供了简单的API和丰富的功能,方便开发者进行网络编程和数据抓取。
  2. 支持多种协议:urllib库支持多种协议,如HTTP、FTP、SMTP等,方便开发者进行不同协议的网络请求。
  3. 支持身份验证和代理:urllib库支持基本的身份验证和代理设置,方便开发者进行需要身份验证或需要通过代理访问网络资源的请求。
  4. 可定制性高:urllib库允许开发者自定义请求头、请求体等信息,方便开发者进行定制化的网络请求。

然而,urllib库也存在一些缺点:

  1. 无法处理动态网页:urllib库无法处理动态网页,因为动态网页的内容是在服务器端生成的,而urllib库只能获取静态网页的内容。
  2. 无法处理cookies和会话管理:urllib库无法处理cookies和会话管理,对于需要登录才能访问的网站来说,需要使用其他库如requests来处理。
  3. 无法处理图像等多媒体内容:urllib库只能获取网页的HTML内容,无法处理图像、音频、视频等多媒体内容。如果需要下载图片等多媒体内容,需要使用其他库如requests-html等。
  4. 无法处理HTTPS请求:urllib库在默认情况下无法处理HTTPS请求,如果需要发送HTTPS请求,需要安装额外的证书或者使用其他库如requests等。

总的来说,urllib库是一个简单易用的网络请求库,适用于基本的网络请求和数据抓取。但对于更复杂的需求,可能需要使用其他更强大的库如requests等。

    3.如何快速使用urllib爬取网页

  1. 导入必要的库:import urllib.requestfrom bs4 import BeautifulSoup

  2. 创建一个URL对象,指定您要爬取的网页地址:url = "http://example.com"

  3. 使用urllib.request.urlopen()函数发送GET请求,并获取响应对象:response = urllib.request.urlopen(url)

  4. 读取响应对象的内容,并使用BeautifulSoup进行HTML解析:html = response.read()                                                                                 soup = BeautifulSoup(html, 'html.parser')

  5. 使用BeautifulSoup选择器或方法提取所需的数据。例如,使用select()方法选择具有特定CSS选择器的元素:titles = soup.select('h1.title')  
                              for title in titles:  
                              print(title.get_text())

  6. 关闭响应对象:response.close()

完整的示例代码如下:

import urllib.request  
from bs4 import BeautifulSoup  
  
url = "http://example.com"  
response = urllib.request.urlopen(url)  
html = response.read()  
soup = BeautifulSoup(html, 'html.parser')  
  
titles = soup.select('h1.title')  
for title in titles:  
    print(title.get_text())  
      
response.close()

4.如何快速使用urllib实现数据传输

  1. 导入urllib库:import urllib

  2. 创建一个URL对象:url = "http://example.com"

  3. 创建一个请求对象,并设置请求方法(GET、POST等):                                             request = urllib.request.Request(url, method="GET")

  4. 发送请求并获取响应:response = urllib.request.urlopen(request)

  5. 读取响应内容:data = response.read()

  6. 关闭响应对象:response.close()

完整的示例代码如下:

import urllib.request  
url = "http://example.com"  
request = urllib.request.Request(url, method="GET")  
response = urllib.request.urlopen(request)  
data = response.read()  
response.close()

以上代码将向指定的URL发送一个GET请求,并读取响应内容。您可以根据需要修改请求方法和URL,以及处理响应内容。

5.使用urllib库爬取百度贴吧

def write_page(html,filename):
print("正在保存"+filename)
with open(filename,'w',encoding='utf-8')as file:
file.write(html.decode('utf-8'))
if __name__=="__main__":
   kw=input("请输入需要爬取的贴吧名:")
   begin_page=int(input("请输入起始页:"))
   end_page=int(input("请输入结束页:"))
   url='http://tieba.baidu.com/f?'
   key=urllib.parse.urlencode({"kw":kw})
#组合后的url示例:http://tieba.baidu.com/f?kw=lol
   url=url+key
   tieba_spider(url,begin_page,end_page)
def tieba_spider(url,begin_page,end_page):
   for page in range(begin_page,end_page + 1):
       pn=(page-1)*50
       file_name="第"+str(page)+"页.html"
       full_url=url+"&pn="+str(pn)
       html=load_page(full_url,file_name)
       write_page(html,file_name)
def load_page(url,filename):
    headers={"User-Agent":"Mozilla/5.0(compatible;MSIE 9.0; Windows NT 6.1;Trident/5.0;)}
    request=urllib.request.Request(url,headers=headers)
    return urllib.request.urlopen(request).read()

运行结果为:

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值