Python3爬虫学习笔记2.1——爬文字-糗事百科

欢迎捧场,这次我们爬取糗事百科的幽默笑话大全,这里边只有文字内容,处理比较方便。

为了匹配我们需要的笑话内容,我们选择用正则表达式来处理。

.匹配任意字符,换行符除外,一个占位符
*匹配前一个字符0次或无限次,
?匹配前一个字符0次或者1次
.*贪心算法
.*?非贪心算法
() 括号内的数据作为结果返回

indall: 匹配所有符合规律的内容,返回包含结果的列表
Search: 匹配并提取第一个符合规律的内容,返回一个正则表达式对象
Sub: 替换符合规律的内容,返回替换后的值

我们爬取的当前页的url为http://www.qiushibaike.com/text/ ,第二页的url为http://www.qiushibaike.com/text/page/2/ ,如果我们在地址栏中输入http://www.qiushibaike.com/text/page/1/,你会发现,页面会跳到你需要爬取页面的首页,这样就很方便我们处理了,我们可以用正则表达式匹配url的内容,然后替换掉。

re.sub('/page/\d','/page/%d'%i,old_url,re.S)

获取到每个带爬取页面的url之后,我们看一下需要处理的笑话内容。
笑话
可以发现,笑话的内容都放在 class=”content” 的块级元素中,则可以使用以下正则表达式。

re.findall('<div class="content">(.*?)</div>',source,re.S)

在处理完url和笑话内容的匹配后,我们可以把程序写出来如下:

#coding='utf-8'
#爬糗百的段子
import re
import requests
import time
import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

class spider():
    def getUrl(self,old_url,total_page):
        all_links=[]
        for i in range(1,total_page+1):
            new_url=re.sub('/page/\d','/page/%d'%i,old_url,re.S)
            all_links.append(new_url)
        return all_links  

    def getSource(self,url):

        header={
                'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
                }
        payload = {
                    's': '4907062', 
                    }


        html=requests.get(url,headers=header,params=payload)

        return html.text

    def getContent(self,source):
        content=re.findall('<div class="content">(.*?)</div>',source,re.S)
        return content

    def saveFile(self,info):
        f=open('info.txt','a')
        for each in info:
            f.writelines(each.decode('utf-8'))

        f.close()

if __name__=='__main__':
    contents=[]
    url_qiubai='http://www.qiushibaike.com/text/page/1/'
    total_page=20
    qiubaiSpider=spider()
    links=qiubaiSpider.getUrl(url_qiubai,total_page)
    for link in links:
        print('准备爬取'+link)
        a=qiubaiSpider.getSource(link)
        content=qiubaiSpider.getContent(a)
        #print('准备爬取'+link)
        for x in content:
            contents.append(x.encode('utf-8'))      
            print(x)
        time.sleep( 1 )
    qiubaiSpider.saveFile(contents)

爬取输出
最后有一个编码的问题,再保存文件的时候没有解决,抱歉。下次学习爬取网页图片,先给各位老司机安利一个网站:妹子图;一起努力进步吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值