• 爬虫二:爬取糗事百科段子


      这一次我们利用BeautifulSoup进行网页的解析,方法其实跟前一次的差不多,只是这里我们爬取的是糗事百科,糗事百科有反爬机制,我们需要模拟用户来访问糗事百科网站,也就是加上头部信息headers,其实整体思路与上一篇所写爬虫的思路差不多,拿个速度可以共用。

    1、首先我们在打开网页,并在网页空白处右击选择“检查”在弹出的网页里选择"Network"

    2、然后按下“F5”刷新一下

    3、在刷新后的页面里我们可以看到多条信息,任意选择一条信息点开

    4、在点开的页面最后我们可以看到我们需要获得用户信息(一次不行换别的在点击打开,会看到的)

    这样头部信息的获取就完成了,对于网页每个部分就要你对网页有一定的了解了。

     user_agent就是模拟用户登录时所携带的信息。

    Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 这里就是用户登录时所携带的信息。

    headers = {'User-Agent':user_agent} 这里就是具体模拟用户访问了,在通过访问以后我们可以请求获得网页源码,然后我们在源码里进行匹配获取我们想要的信息。
     1 # -*- coding: utf-8 -*-
     2 
     3 __author__ = 'Demon'
     4 
     5 import urllib2,re
     6 from bs4 import BeautifulSoup
     7 
     8 def getContentorComment(Url):#定义一个函数,用来获取源码
     9     #模拟用户登录,加上headers就是为了攻破反爬
    10     user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    11     headers = {'User-Agent':user_agent}
    12     req = urllib2.Request(url=Url,headers=headers)#以用户的身份请求获得源码
    13     try:#异常处理,一般以5开头的错误都是网络错误
    14         response = urllib2.urlopen(req)#打开源码
    15         content = response.read()#读取源码
    16     except Exception,e:
    17         content = None#如果出现错误,就返回没有爬取源码
    18     #print content
    19     return content
    20 
    21 articleUrl = "http://www.qiushibaike.com/textnew/page/%d"
    22 commentUrl = "http://www.qiushibaike.com/article/%s"
    23 page = 0
    24 while True:#进行个用户输入
    25     raw = raw_input("点击enter查看或者点击exit退出,请输入你的选择:")
    26     if raw == "exit":
    27         break
    28     page+=1
    29     Url = articleUrl % page
    30     print Url
    31     articalpage = getContentorComment(Url)
    32     articleFloor = 1
    33     soupArticle = BeautifulSoup(articalpage,'html.parser')#用BeautifulSoup进行网络解析
    34     for string in soupArticle.find_all(attrs="article block untagged mb15"):#对文章编号进行获取
    35         commentId = str(string.get('id')).strip()[11:]#获得文章编号
    36         print "
    "#换行
    37         #print commentId
    38         print articleFloor,".",string.find(attrs="content").get_text().strip()#对文章的进行获取
    39         articleFloor+=1
    40         commentPage = getContentorComment(commentUrl % commentId)
    41         if commentPage is None:
    42             continue
    43         soupComment = BeautifulSoup(commentPage,'html.parser')
    44         commentFloor = 1
    45         for comment in soupComment.find_all(attrs="body"):#对文章的评论进行获取
    46             print "     ",commentFloor,"楼回复:",comment.get_text()
    47             commentFloor+=1

     因为我们在设计的时候添加了人性化输入,既用户输入,当我们按下回车键的时候程序开始继续执行:

     这是按下enter以后显示的页面网址与页面每条段子:

     我们进行了岁恢复内容的爬取,并注上第几次楼(沙发):

    只要勤加练习相信我,爬虫对你来说不是问题,爬虫所用的库各种各样,找到一种你喜欢的。

  • 相关阅读:
    练习2-15 求简单交错序列前N项和(15 分)
    js预解析实例
    one:arguments对象伪数组
    第一章 评估工具
    第6章条件处理
    第五章----过程
    第4章 数据传递.寻址和算术运算
    第3章 汇编语言基础
    第2章-------------IA-32处理器体系结构
    第一章-------基本概念
  • 原文地址:https://www.cnblogs.com/zhangjiansheng/p/6863578.html
Copyright © 2020-2023  润新知