python爬虫实战(1) —get请求

文章目录

      • 一、爬虫任务
      • 二、任务分析
      • 二、脚本
      • 三、运行结果

一、爬虫任务

在百度上搜索“小明”,将搜索结果的前三页保存到本地

二、任务分析

  1. 发送的请求是get请求,请求的url如下:
http://www.baidu.com/s?wd=小明&          #第1页
http://www.baidu.com/s?wd=小明&pn=10 #第2页
http://www.baidu.com/s?wd=小明&pn=20 #第3页
  1. 整体任务是一个循环,循环的变量是pn值,pn的值由当前页码决定。pn=(当前页码-1)*10。
  2. 每次发送一个请求后,我们需要获取服务器的响应。
  3. 将响应文件保存在本地

注意点:

  • 需要把请求中参数的形式从key-value转换成字符串
  • 获取响应文件的二进制形式即可
  • 以二进制的形式将响应写入到本地(wb的模式)

二、脚本

import urllib
from urllib import request

#爬取网站,下载网页
def download(url,filename):
    print("正在下载"+filename)
    httpHandler=request.HTTPHandler()
    opener=request.build_opener(httpHandler)
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0"}
    req=request.Request(url,headers=headers)
    return opener.open(req).read()  #返回响应,二进制形式

#将网页保存到本地
def writefile(html,filename):
    print("正在保存"+filename)
    with open(filename,mode='wb') as f:
        f.write(html)

#爬取网站
def spider(url,beginPage,endPage):
    for page in range(beginPage,endPage+1): #循环页数
        pn=(page-1)*10  #当前页的pn值
        print("------------第"+str(page)+"页开始下载------------")
        fullurl=url+"&"+urllib.parse.urlencode({"pn":pn})#每次请求的完整url
        print(fullurl)
        filename="f:\第"+str(page)+"页.html"  #每次请求保存的文件
        html=download(fullurl,filename) #爬取网站,下载网页
        writefile(html,filename)# 将保存到本地
        print("\n")

if __name__=="__main__":
    url="http://www.baidu.com/s?" #爬取网站
    wd=input("请输入搜索的关键字:")
    #url编码转换
    url=url+urllib.parse.urlencode({"wd":wd}) #拼接参数wd
    beginPage=int(input("请输入起始页:"))
    endPage=int(input("请输入结束页:"))

    #爬取网站
    spider(url,beginPage,endPage)

三、运行结果

1、控制台信息如下:
python爬虫实战(1) —get请求_第1张图片
2、本地保存了以下文件:
python爬虫实战(1) —get请求_第2张图片
其中,第2页.html的内容如下:
python爬虫实战(1) —get请求_第3张图片

你可能感兴趣的:(爬虫)