python爬取百度贴吧指定内容

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30500113/article/details/83580904

环境:python3.6

1:抓取百度贴吧—linux吧内容 基础版 抓取一页指定内容并写入文件

萌新刚学习Python爬虫,做个练习
贴吧链接: http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0
解析源码使用的是BeautifulSoup
关于BeautifulSoup: 可以直接查看官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
文件存储使用json的方式
当然你可以保存成txt文件
废话不多说 直接上代码

'''
抓取百度贴吧---linux吧内容
基础版 抓取一页指定内容并写入文件
爬虫线路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content


# 解析内容
def parse(text):
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    # 创建一个列表存储所有结果
    result_list = []
    for info in infos[1:]:
        # 创建一个字典将所有信息存入字典中
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()    # 帖子标题
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']  # 帖子链接
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()    # 帖子作者
        mydict['time'] = info.find('span', class_='pull-right').text    # 发表时间
        result_list.append(mydict)
    return result_list


# 将数据写入json文件
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('tieba.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    # 贴吧链接
    url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0'
    text = start_requests(url)
    result = parse(text)
    write_json(result)


# 一般做法
if __name__ == '__main__':
    main()

文件内容:
在这里插入图片描述

2:抓取百度贴吧—linux吧内容 升级版 抓取指定页内容并写入文件 多页抓取之构造url

'''
抓取百度贴吧---linux吧内容
升级版 抓取指定页内容并写入文件
多页抓取之构造url
爬虫线路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
    r = requests.get(url)
    print(111)
    return r.content


# 解析内容
def parse(text):
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    for info in infos[1:]:
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
        mydict['time'] = info.find('span', class_='pull-right').text
        result_list.append(mydict)


# 将数据写入json文件
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('all_tieBa.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    for i in range(10):
        url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn={}'.format(i * 50)
        text = start_requests(url)
        parse(text)
    write_json(result_list)
    print('写入完成')


# 一般做法
if __name__ == '__main__':
    result_list = []
    main()

3:抓取百度贴吧—linux吧内容 升级版 抓取所有页内容并写入文件 多页抓取之翻页

这里要抓取的内容已经很多了,速度会很慢,萌新还不会通过其他技术来加速下载速度

'''
抓取百度贴吧---linux吧内容
升级版 抓取所有页内容并写入文件
多页抓取之翻页
爬虫线路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content


# 解析内容
def parse(text):
    """
       翻页原理是爬取一页的信息的同时,把下一页的url也爬取到,再对抓取到的这个url进行爬取。这种方法适用于有“下一页”
       标签的网站,而且一般是网页url无法构造的时候才用这种方法。
        用这种方法要注意对有无下一页进行判断
       """
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    for info in infos[1:]:
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
        mydict['time'] = info.find('span', class_='pull-right').text
        result_list.append(mydict)
    # 此处获取下一页的链接对象
    next_page = soup.find('a', class_='next')
    if next_page:
        next_url = 'http:'+next_page['href']
        print(next_url)
        text = start_requests(next_url)
        parse(text)


# 将数据写入json文件
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('tieba3.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    text = start_requests(base_url)
    parse(text)
    write_json(result_list)
    print('写入完成')


# 一般做法
if __name__ == '__main__':
    base_url = 'http://tieba.baidu.com/f?ie=utf-8&kw=linux&fr=search&red_tag=s0376598528'
    result_list = []
    main()

运行代码:
在这里插入图片描述

总结到此为止 -->over

猜你喜欢

转载自blog.csdn.net/qq_30500113/article/details/83580904