爬虫 第二天

  1. urllib2.urlopen
  2. response的函数方法
  3. add_header和get_header
  4. url加密传播(urlencode)
  5. urllib 和urllib2不同之处
  6. 百度贴吧小代码

urllib2.urlopen

urlopen()内的数据为(url,data,timeout)
url 目标网址地址
data 为提交数据 默认为get 写的话就是post,timeout为超时时间限制
应用实例:

re=urllib2..urlopen("http://www.baidu.com")

通过模拟浏览器的查询方式,通过反爬虫限制,通过request
User-Agent 是爬虫和反爬虫的第一步

response的函数方法

# response 是服务器响应的类文件,除了支持文件操作的方法外,还支持一下的方法

# 获得状态码反馈,4是服务器页面出错,5服务器出错
print response.getcode()

#返回实际数据的页面,防止重定向问题

print response.geturl()

# 返回服务器响应的报头

print response.info()

add_header和get_header

add_header 将列表中得到的user_agent加到User-Agent中去

get_header 是将列表中的User-Agent的值给取出来

url加密传播(urlencode)

在浏览器的提出搜索请求,形成如下的url链接

https://www.baidu.com/s?wd=专职&ie=utf-8

而浏览器自己通过解析将汉字加密成浏览器能读懂的方式写入服务器进行搜索

urllib 的urlencode() 接收字典

wd={"wd":"传智播客"}

urllibe.urlencode(wd)

urllib 和urllib2不同之处

    urllib 仅可以接受URL,不能创建设置headers和request类实例

    但是urllib提供urlencode方法用来GET查询字符串的产生
而urllib2则没有.(这就是urllib和urllib2经常一起使用的主要原因)

    编码工作使用urllib的urlencode()函数,帮我们将key:value这样的
键值对转换成“key-value-这样字符串,解码工作可以使用urllib
的unquote()函嫩。(注意,不是urlib2.urlencode0)

百度贴吧小代码


# _*_ encoding:utf-8 _*_ 
<上面的标头一定要有,这样才能保证其编码中的文字正常输出>
import urllib2
import urllib

def loadPage(url,filename):

    """
    作用:根据url发送请求,获取服务器响应文件
    url 需要爬取的url地址
    filename 处理的文件名
    :return:
    """

    print "正在下载" + filename

    headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0"
}
    request = urllib2.Request(url,headers=headers)

    return urllib2.urlopen(request).read()

def writePage(html,filename):
    """
    将html内容写入本地
    服务器相应文件内容
    :return:
    """
    print "正在保存" + filename
    # 文件写入
    with open("D:/Pro_py2/venv1/ceshi/"+filename.decode('utf-8'),"w") as f:
    <写入文件的操作有编码问题,判断可能跟个人的编码器设置有关,若出现:
    IOError: [Errno 22] invalid mode ('w+') or filename
    错误,应该是filename中存在文字,跟utf-8编码,即可解决。
    "D:/Pro_py2/venv1/ceshi/" 此添加可指定文件位置
    >
        f.write(html)
    print "_" * 30

def tiebaSpider(url,beginPage,endPage):

    #  作用:贴吧爬虫调度器,负责组合处理每个页面的url
    #  url : 贴吧url的前部分
    #  beginPage 起始页
    #  endPage 结束页
    for page in range(beginPage,endPage+1):
        # 百度页面的url比值如此
        pn=(page - 1)*50
        # pn为int型无法拼接,需要转换类型
        filename="第"+str(page)+"页.html"
        fullurl = url + "&pn=" + str(pn)
        #print fullurl

        html=loadPage(fullurl,filename)
        #print html
        #writePage(html,filename)
        writePage(html,filename)
        print "谢谢使用"
if __name__ == "__main__":
    kw1 = raw_input("请输入")
    beginPage=int(raw_input("开始页数"))
    endPage = int(raw_input("结束页数"))

    url = "http://tieba.baidu.com/f?"
    key=urllib.urlencode({"kw":kw1})
    fullurl=url+key
    tiebaSpider(fullurl,beginPage,endPage)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zhumeng512@qq.com

文章标题:爬虫 第二天

本文作者:弈少

发布时间:2019-08-17, 15:42:39

最后更新:2019-08-25, 20:37:52

原始链接:http://yoursite.com/2019/08/17/爬虫/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

相册