Datehoer的博客
我本将心向明月,奈何明月照沟渠
Datehoer的博客

当前位置:主页 > 日常学习 > python 爬取知乎盐选全部内容

python 爬取知乎盐选全部内容

浏览: 作者:Datehoer 发布日期:2020-11-27 20:47:51 来源: 原创
没想到进阶版来的这么快,在发布了python爬取知乎盐选文章内容后,没想到居然这么快就要更新新的内容了。
在下午思考第一篇python爬取知乎盐选文章内容的时候,其实就把自动爬取目录内的其他内容的方法想出来了,但是本来没想这么快更新的,哈哈。
不过思来想去还是发出来吧,毕竟要不哪天就忘了。

from DecryptLogin import login

from bs4 import BeautifulSoup

import re

import base64

lg = login.Login()

_, loginstauts = lg.zhihu(username='', password='', mode='pc')

headers = {

    'user-agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"

}

url1 = "https://www.zhihu.com/market/paid_column/1178733193687175168/section/1178742737682350080"

url2 = "https://www.zhihu.com/market/paid_column/1178733193687175168/section/1178742849583083520"

# 获取链接

r = loginstauts.get(url1, headers=headers)

wenzi = r.text

soup = BeautifulSoup(wenzi, 'lxml')

lianjie = soup.textarea

lianjie = str(lianjie)

pattern = re.compile('"next_section":{"url":"(.+)","is_end":') #正则匹配链接所在的文字

result = pattern.findall(lianjie)

texts = soup.find_all('p')

for text in texts:

    with open("yanxuan.txt", 'a', encoding='utf-8') as file_object:

        file_object.write(text.get_text()+" ")

list = result.pop(0)

print(list)

for link in range(0, 9):

    r2 = loginstauts.get(list, headers=headers)

    wenzi = r2.text

    soup = BeautifulSoup(wenzi, 'lxml')

    lianjie = soup.textarea

    lianjie = str(lianjie)

    pattern = re.compile('"next_section":{"url":"(.+)","is_end":')  # 正则匹配链接所在的文字

    result = pattern.findall(lianjie)

    list = result.pop(0)

    texts = soup.find_all('p')

    for text in texts:

        with open("yanxuan.txt", 'a', encoding='utf-8') as file_object:

            file_object.write(text.get_text()+" ")

        # print(text.get_text())

 

# print(list)

# r2 = loginstauts.get(list, headers=headers)

# wenzi2 = r2.text

# soup2 = BeautifulSoup(wenzi2, 'lxml')

 


直接上一手代码,讲一下思路,首先先是获取文本内容,通过前面的文章,我们知道 了如何获取文本内容,并且明白了该怎么获取整个页面的html内容。
本来最初的想法是把目录里的每一个链接都复制下来,然后通过遍历来获取链接,因为我最初是真的没发现下一篇的链接是通过哪里获得的。然后今天下午的时候,认认真真(闲的蛋疼)的看了一下知乎盐选文章内容的源代码,发现原来跳转链接在他的底部textarea里,并且还是在里面的一个next_section里,让我一顿好找,不过找到就是最好的啦。
找到之后,我们只需要获取到跳转的链接即可了,只需要使用正则进行条件筛选就可以了。

pattern = re.compile('"next_section":{"url":"(.+)","is_end":')  # 正则匹配链接所在的文字

result = pattern.findall(lianjie)

也就是这一段代码,我们对获取的内容进行匹配筛选,即可获得链接了,不过在获得之后,还是会出现一个问题,就是获取的内容会储存在列表里,我们还需要把列表的内容读取出来才能使用。本来其实最早我的思路是使用循环,然后把获取到的链接储存到同一个列表里,然后利用循环读取即可,但是因为当时脑子可能抽了,把变量的值给改错了,前面虽然该出来了,但是后面的都没改,就会得到一个很尴尬的结果,就是所有的结果都是同一个,然后我就换了种方法,没想到刚换就找到了问题所在。不过也懒得该回去了。通过列表的方法pop来对列表内容进行删除,并且将删除返回的值进行保存,然后当作一个数据进行储存。
也就是这一段的内容了

for link in range(0, 9):

    r2 = loginstauts.get(list, headers=headers)

    wenzi = r2.text

    soup = BeautifulSoup(wenzi, 'lxml')

    lianjie = soup.textarea

    lianjie = str(lianjie)

    pattern = re.compile('"next_section":{"url":"(.+)","is_end":')  # 正则匹配链接所在的文字

    result = pattern.findall(lianjie)

    list = result.pop(0)

    texts = soup.find_all('p')

    for text in texts:

        with open("yanxuan.txt", 'a', encoding='utf-8') as file_object:

            file_object.write(text.get_text()+" ")

        # print(text.get_text())

 

其他的也就没有什么难度的东西了,不过如果有什么疑问,可以在评论区留下你的疑惑,我会在看到的第一时间进行回复的。

版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/rcxx/64.html。

文章推荐

热门标签

返回顶部
下面为相关推荐
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!