Python3爬虫教程 百度贴吧爬虫

 内涵001   2023-04-06 15:44:06   0 人阅读  0 条评论

Python3爬虫教程 百度贴吧爬虫

本文核心词:百度贴吧,爬虫,Python

先说下我写这个爬虫的思路吧:首先是利用selenium模拟浏览器,然后搜索贴吧名,如果不存在就提示“没有找到该贴吧”,然后重新输入,如果搜到了这个贴吧,就进入该贴吧并且显示该贴吧首页上的所有帖子,然后我们可以选择查看哪一个帖子,程序就会返回该帖子的内容,对于评论较多的帖子,还可以查看下一页,如果想看别的帖子,可以退回到首页重新选择。

环境:Windows7,Python3.5,pycharm

使用到的库:requests,re,selenium,time

具体步骤:一、搜索贴吧

先搜索一个存在的贴吧(比如python),得到的网页链接是

然后搜索一个不存在的贴吧(比如sad213),得到的网页链接是

对比两个链接可知,如果返回的链接里包含tieba.baidu.com/f?ie=utf-8,则该贴吧存在。所以我利用selenium模拟浏览器,根据返回的结果判断搜索的贴吧是否存在。

二、显示贴吧首页的帖子

在搜索到贴吧之后,我们要进入该贴吧并查看该贴吧首页上的帖子,这部分实现起来不算难。

首先是获取网页源码,用requests.get()方法请求网页,然后打印出text内容,可以找到如下部分。

要提取发帖人的名字和帖子主题,我选择用正则表达式来实现,具体代码如下:

titles = re.findall(a rel=noreferrer href=/p/(\w+) title=(.*?), res.text)

authors = re.findall(title=主题作者: (.*?), res.text)

这样我们就能成功获取首页上的帖子信息了。

三、查看某一个帖子

要查看一个帖子里的内容,第一步是和上面的步骤一样的,用get方法请求网页,然后打印text,再用正则表达式提取回复人的名字和回复内容。

接下来的步骤花了我不少时间,因为很多人在评论的时候会发表情,而这些表情我们是无法将它显示出来的,因此我选择将表情对应的链接显示出来,如果要看别人发的是什么表情,直接点链接进去就能看到了。对于评论中的图片,我也是这么处理的,将图片的链接显示出来。

这一步还有一个坑,就是因为有些人的回复是带有回复框的,也就是说这些人的评论是包裹在p>

通过观察网页源码,我发现可以用正则表达式匹配到这部分回复,然后对于这些回复,也要进行处理后再显示出来。

comment_list2 = re.findall(post_bubble_middle_inner(.*?)p>这样我们就能够搜索贴吧并且进入贴吧查看我们想看的帖子了==

具体源码如下:

```

import requests

import time

import re

from selenium import webdriver

有需要Python学习资料的小伙伴吗?小编整理一套Python资料和PDF,感兴趣者可以加学习群:548377875,反正闲着也是闲着呢,不如学点东西啦~~

headers = {

user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/

53.0.2785.89 Safari/537.36

}

class TieBa:

def __init__(self, name, url):

self.name = name # 贴吧名

self.url = url # 贴吧首页的url

# 显示首页上的帖子作者和标题

def get_homepage(self):

print(\n\t\t\t\t\t\t{}吧.format(self.name))

res = requests.get(self.url, headers=headers)

titles = re.findall(a rel=noreferrer href=/p/(\w+) title=(.*?), res.text)

authors = re.findall(title=主题作者: (.*?), res.text)

for title, author in zip(titles, authors):

print(str(titles.index(title) + 1) + -- + author + : + title[1])

print(\n****************************)

n = int(input(请输入您想要查看的帖子序号:))

print(****************************\n)

self.get_page(

# 显示帖子的具体内容

def get_page(self, page_url):

res = requests.get(page_url, headers=headers)

author_list = re.findall(p_author_name j_user_card.*?(.*?), res.text)

comment_list = re.findall(content clearfix(.*?)/p>

if len(comment_list) == 0:

comment_list = re.findall(d_post_content j_d_post_content (.*?)/p>

# 带回复框的单独考虑

comment_list2 = re.findall(post_bubble_middle_inner(.*?)p>

num = 0

# 处理图片和表情,显示对应的链接

for author, comment in zip(author_list, comment_list):

print(author.strip(), end= : )

comment = comment.strip().replace(br,)

if p>

comment = comment_list2[num].replace(br,).replace(/p>

num += 1

if src in comment: # 处理图片信息

src_list = re.findall(src=(.*?), comment)

pattern_list = re.findall((img.*?), comment)

for s, p in zip(src_list, pattern_list):

comment = comment.replace(p,+ s)

if href in comment: # 处理表情信息

pattern_list = re.findall((a .*? ), comment)

for p in pattern_list:

comment = comment.replace(p,).replace(/a, )

print(comment)

while True:

x = int(input(\n输入1查看下一页,输入0回到首页,输入-1退出程序:))

if x == -1:

exit()

if x == 0:

self.get_homepage()

if x == 1:

next_page = re.findall(a href=(.*?)下一页, res.text)

if len(next_page)0:

self.get_page(

else:

print(已经是最后一页了!)

# 利用selenium模拟浏览器查找贴吧

def search():

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument(--headless)

browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get(

name = input(请输入想要进入的贴吧名字:)

browser.find_element_by_xpath(//*[@id=wd1]).send_keys(name)

browser.find_element_by_xpath(//*[@id=tb_header_search_form]/span[1]/a).click()

url = browser.current_url

if tieba.baidu.com/f?ie=utf-8 in url: # 搜索的贴吧存在

print(正在进入{}吧,请稍等....format(name))

time.sleep(2)

t = TieBa(name, url)

t.get_homepage()

else:

print(没有找到{}吧\n.format(name))

main()

def main():

x = int(input(输入1搜索进入贴吧,输入-1退出程序:))

if x == 1:

search()

else:

exit()

if __name__ == __main__:

main()

```

本文地址:https://www.neihan001.com/mszs/55869.html
版权声明:免责声明:本文来源网友投稿及网络整合仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。投诉邮箱:1765130767@qq.com.
  • 评论已关闭!