用到的包有requests - BeautSoup

我爬的是天涯论坛的财经论坛:‘http://bbs.tianya.cn/list.jsp?item=develop’

它里面的其中的一个帖子的URL:‘http://bbs.tianya.cn/post-develop-2279340-1.shtml’

第一步:定义了三个函数跟一个main函数

def getHtmlText(url):
pass
def getHtmlList(list,url,main_url):
   pass
def getHtmlInfo(list,fpath):
pass
def main():
pass

第一个函数是获取一个url,通过requests.get()方法,获取页面的信息,这是一个获取url资源的模块

第二个函数是获取一个url,调用第一个函数解析财经论坛页面,获取到其中的子帖子的url,存放在list中

第三个函数是把list中的url通过for循环一个一个解析页面,获取其中我们想要的内容,然后把得到的内容存放在指定的电脑的位置里

main函数里就是调用这几个函数

第二步:代码的具体实现

# encoding:utf8
import requestsfrom bs4 import BeautifulSoup
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
#获取一个url,通过requests.get()方法,获取页面的信息,这是一个获取url资源的模块
def getHtmlText(url):
try:
r = requests.get(url)
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html,'html.parser')
return soup
except:
print("解析网页出错") #获取一个url,调用第一个函数解析财经论坛页面,获取到其中的子帖子的url,存放在list中
def getHtmlList(list,url,main_url):
try:
soup = getHtmlText(url)
managesInfo = soup.find_all('td',attrs={'class':'td-title faceblue'})
for m in range(len(managesInfo)):
a = managesInfo[m].find_all('a')//获取帖子的位置
for i in a:
try:
href = i.attrs['href']
list.append(main_url+href)//把帖子的url存放在list中 except:
continue
except:
print("获取网页失败") #把list中的url通过for循环一个一个解析页面,获取其中我们想要的内容,然后把得到的内容存放在指定的电脑的位置里
def getHtmlInfo(list,fpath):
for i in list:
infoDict = {}//初始化存放帖子要获取的全部信息的字典
authorInfo = []//初始化存放帖子评论的作者的信息的列表
comment = []//初始化存放帖子评论的信息的列表
try:
soup = getHtmlText(i)
if soup ==""://如果页面不存在则跳过,继续获取
continue
Info = soup.find('span',attrs={'style':'font-weight:400;'})
title = Info.text//获取帖子的标题
infoDict.update({'论坛话题: ':title})//把帖子的标题内容存放到字典中
author = soup.find_all('div',attrs={'class':'atl-info'})
for m in author:
authorInfo.append(m.text)//把帖子中的评论的作者的信息存放到列表里
author = soup.find_all('div',attrs={'class':'bbs-content'})
for m in author:
comment.append(m.text)//把帖子的评论的信息存放在列表里
for m in range(len(authorInfo)):
key = authorInfo[m]+'\n'
value = comment[m]+'\n'
infoDict[key] = value//把评论的作者的信息跟评论的内容以键值对的形式存储起来
#把获取到的信息存放在自己指定的位置
with open(fpath,'a',encoding='utf-8')as f:
for m in infoDict:
f.write(str(m)+'\n')
f.write(str(infoDict[m])+'\n')
except:
continue
def main():
main_url = 'http://bbs.tianya.cn'
develop_url = 'http://bbs.tianya.cn/list-develop-1.shtml'
ulist = [] fpath = r'E:\tianya.txt'
getHtmlList(ulist,develop_url,main_url)
getHtmlInfo(ulist,fpath)
main()//运行main函数

好了,这个代码就写完了,我来总结下我在写这个代码中遇到的问题。

总结:

这个代码很简单,但是其中的一些细节我一开始没有处理好

在写第三个函数的时候,把获取到的信息全部存放在字典中,在调试中发现获取到的信息有很多重复的,

后来发现是没有初始化每个列表里的信息。因为是循环存放信息的,读取完一个帖子的信息之后要把存放

信息的列表初始化,要不会重复输出之前存入的信息。

【Python爬虫案例学习】Python爬取天涯论坛评论的更多相关文章

  1. python 网络爬虫(一)爬取天涯论坛评论

    我是一个大二的学生,也是刚接触python,接触了爬虫感觉爬虫很有趣就爬了爬天涯论坛,中途碰到了很多问题,就想把这些问题分享出来, 都是些简单的问题,希望大佬们以宽容的眼光来看一个小菜鸟

  2. python爬虫:了解JS加密爬取网易云音乐

    python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...

  3. Python爬虫:为什么你爬取不到网页数据

    前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...

  4. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  5. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  6. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  7. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  8. 【Python爬虫案例学习】python爬取淘宝里的手机报价并以价格排序

    第一步: 先分析这个url,"?"后面的都是它的关键字,requests中get函数的关键字的参数是params,post函数的关键字参数是data, 关键字用字典的形式传进去,这 ...

  9. 【Python爬虫案例学习】Python爬取淘宝店铺和评论

    安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动sel ...

随机推荐

  1. JS中var声明与function声明以及构造函数声明方式的区别

    JS中常见的三种函数声明(statement)方式有这三种: // 函数表达式(function expression) var h = function () { // h } // 函数声明(fu ...

  2. Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)

    0x00 漏洞描述 Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统.该系统主要用于对工作中各类问题.缺陷进行跟踪管理. Atlassian Jira Server和 ...

  3. mysql单个表拆分成多个表

    一.横向拆分 create table 新表的名称 select * from 被拆分的表 order by id limit int1,int2 int1为其实位置,int2为几条 注意:这样拆分后 ...

  4. k8s集群搭建(一)

    k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...

  5. 使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

    开发环境 PC:ubuntu18.04 Qemu:4.1 Kernel:Linux-5.2 概述 由于要学习ARM的SVE技术,但是目前还没有支持SVE指令的板子,所以只能用Qemu来模拟,但是发现Q ...

  6. VMware Xcode真机调试

    原因如下:VMware12默认使用usb3.0 ,先给苹果系统关机,然后打开虚拟机设置,更改usb控制器为USB2.0 就可以成功连接了. 问题提示:could not launch “name” p ...

  7. VIJOS-P1282 佳佳的魔法照片

    洛谷 P1583 魔法照片 洛谷传送门 JDOJ 1396: VIJOS-P1282 佳佳的魔法照片 JDOJ传送门 Description 一共有n个人(以1--n编号)向佳佳要照片,而佳佳只能把照 ...

  8. 第二阶段冲刺(个人)——six

    今天的计划:选择功能界面的logo.背景与功能选择框的整体设计组合. 昨天做了什么?优化登录.注册信息的填写判断. 困难:无.

  9. selenium 中在 iframe 内的元素定位

    有些时候 元素明明就在 但是通过什么方式定位都提示 定位不到元素 此时就要考虑元素是不是内嵌在iframe 中 对于内嵌在 ifra中的元素定位 首先定位到 iframe 元素 例如 iframe = ...

  10. JS的ES7支持

    1.指数运算符(幂): ** 2.Array.prototype.includes(value) : 判断数组中是否包含指定value console.log(2**4); let arr = [2, ...