记一次笑话网站的爬虫

2022-04-15 16:22:08 浏览数 (1)

今天本来想更新表情包

但是打开网站一看发现还是之前的老表情包

于是就放弃了爬取表情包的想法

可是又不能不能断更

那就换个内容吧

想到了之前的笑话版块

为什么会有这个版块呢

是因为高中的时候总是看读者和青年文摘

但是呢一看长篇的读者上的小说往往会因为看的太入迷耽误了写作业或者被查纪的老师抓住

所以 也就是等个空闲时间看个读者或者青年文摘的小笑话

放松一下

惬意一下

所以n月前 在公众号放出去过一篇文章就是kindle截图读者的笑话

然后在公众号发表文章的时候直接上图

那时候反响还一般

也许是因为没有坚持下来的原因

今天重整旗鼓再来整一遍

希望可以得到你们的热烈反响

没事的时候来看看,惬意一下

但是笑话板块没有经过长久的测验

所以 我就随机找了个笑话网站

爬一下试试

没错 今天还是python爬虫

当然了还是入门级别的

直接上代码

代码语言:javascript复制
import requests
from lxml import etree
import re
import datetime

headers={
    'User-AGent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}



def getJokes(url):
    req=requests.get(url,headers=headers)
    html=etree.HTML(req.text)
    jokes=html.xpath('//div[@class="content"]/text()')
    del jokes[0]
    #print(jokes)
    b=[]
    
    for j,inn in enumerate(jokes):
        o=''
        inn=str(inn)
        o =inn
        b.append(o)
        if re.match(r'[1-9]d*',inn):
            o=''
            o =inn
    for ww in b:
        print(ww)
    with open ('1.txt','a') as f:
        for ii in b:
            ii=str(ii)
            f.write(ii)
            f.write('n')
        time=str(datetime.datetime.now())
        f.write(time "写入") 


url='http://某网站/article/view.aspx?id=8275'    
getJokes(url)

今天倒是没有遇到反扒的问题,遇到了一个小问题就是在爬取完之后,出现了完整的句子被分开了

就是本来序号1之后到序号2之前的句子都属于序号一的句子

但是被无情的分开了

无奈之下,只好慢慢试了

我第一次的想法是找到有数字的元素下标

然后当循环到这几个下标的时候把他们写入到新的数组中

这个想法很快就被否定了,因为是没办法两个循环同时保证下标一致的

然后就是用正则去匹配每一个元素是否包含数字

如果包括的话那肯定就是一句话的开头

所以之前的元素就是一句话

然后这样的话就直接一个for循环搞定

具体的代码实现就是这几行

代码语言:javascript复制
for j,inn in enumerate(jokes):
        o=''
        inn=str(inn)
        o =inn
        b.append(o)
        if re.match(r'[1-9]d*',inn):
            o=''
            o =inn

第二个点

就是爬取完之后写入到本地的txt记事本

然后因为可能会长期的存储

然后就加了一行时间的信息

用来显示时间,这样一来就很清晰了

代码实现:

代码语言:javascript复制
with open ('1.txt','a') as f:
        for ii in b:
            ii=str(ii)
            f.write(ii)
            f.write('n')
        time=str(datetime.datetime.now())
        f.write(time "写入")

最终在我的脑子和学委浩林的帮助下成功写完了全套的代码

peace&love

0 人点赞