爬虫_百度贴吧帖子主题

不同网站有不同的架构,要想爬虫,首先要知道网页是如何通过网络将信息呈现给我们的,客户端与服务端之间是通过TCP协议(传输层)建立两端的连接,http协议负责传输数据的内容和规范。
TCP和http的区别和联系
如果要进行爬虫,就要明白http协议的请求和回复是如何进行的,而且要清楚状态码。
我使用的chrome浏览器,F12能打开开发者模式,我们在这个模式下能进行抓包,爬虫_百度贴吧帖子主题_第1张图片
最上面一栏点击Network,能够看到各种各样格式的文件。
我们还能看到在网页最上面网址那里,http://tieba.baidu.com/f?kw=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&ie=utf-8&pn=0,当我们在切换页面的时候,会发现pn的值在变,
爬虫_百度贴吧帖子主题_第2张图片
切换到第二个,pn变成50,第三个pn变成100,也就是说pn是每页第一个帖子的位置变量。当我们输入http://tieba.baidu.com/f?kw=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&ie=utf-8&pn=50,确实是第二页。
那么我们就可以通过切换pn值,去模拟我们在浏览网页的过程。

下面就可以针对我们想要的东西爬虫了,比如我们想看看大家在讨论什么,可以爬每个帖子的标题。

import urllib.parse
import os
import requests
import re

url = 'http://tieba.baidu.com/f?ie=utf-8&'

# 需求:输入吧名,输入起始页码,输入结束页码
ba_name = input('请输入要爬取的吧名:')
start_page = int(input('请输入要爬取的起始页码:'))
finish_page = int(input('请输入要爬取的终止页码:'))

discuss = []
# page就是当前页
for page in range(start_page, finish_page + 1):
    # 拼接url的过程
    data = {
     
        'kw': ba_name,
        'pn': (page - 1)*50
    }
    data = urllib.parse.urlencode(data)
    # 生成指定的url
    url_t = url + data
    # print(url_t)
    headers = {
     
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
    }
    response = requests.get(url_t)
    sound_code = response.text  # 目标主页的网页源码
    print(sound_code)

我们查看网页源码,会发现下面这些信息
在这里插入图片描述
在这里插入图片描述
对比网页显示的内容,没错这就是帖子的主题,下面就可以用正则化表达式去将主题爬下来,但是我们还发现在每个主题前面有一串变化的数字,这个其实应该是每个发帖人所对应的数字ID。
这个正则表达式应该这么写

word = re.findall(r'', sound_code)

word里面是啥呢?
爬虫_百度贴吧帖子主题_第3张图片
发帖人和帖子主题
如果我们只想要帖子主题,可以写一个for循环,不断将每个tuple的第二个元素提出来即可
完整代码如下

import urllib.request
import urllib.parse
import os
import requests
import re

url = 'http://tieba.baidu.com/f?ie=utf-8&'

# 需求:输入吧名,输入起始页码,输入结束页码,然后在当前文件夹中创建一个以吧名为名字的文件夹,里面是每一页的html内容,文件名是吧名_page.html
ba_name = input('请输入要爬取的吧名:')
start_page = int(input('请输入要爬取的起始页码:'))
finish_page = int(input('请输入要爬取的终止页码:'))
# 创建文件夹
if not os.path.exists(ba_name):
	os.mkdir(ba_name)

discuss = []
# page就是当前页
for page in range(start_page, finish_page + 1):
    # 拼接url的过程
    data = {
     
        'kw': ba_name,
        'pn': (page - 1)*50
    }
    data = urllib.parse.urlencode(data)
    # 生成指定的url
    url_t = url + data
    # print(url_t)
    headers = {
     
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
    }
    response = requests.get(url_t)
    sound_code = response.text  # 目标主页的网页源码
    word = re.findall(r'', sound_code)
    for i in range(len(word)):
        discuss.append(word[i][1])
print(discuss)

discuss内容
爬虫_百度贴吧帖子主题_第4张图片

你可能感兴趣的:(爬虫,python,python,html)