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

来源:互联网 发布:jsp调用java显示图片 编辑:程序博客网 时间:2024/05/23 13:16

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

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

.匹配任意字符,换行符除外,一个占位符
*匹配前一个字符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 reimport requestsimport timeimport sysimport iosys.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 0
原创粉丝点击