python爬虫beautifulsoup_python爬虫初步之BeautifulSoup实战

1.学习beautifulsoup

Step.1 BeautifulSoup是基于标签的,所以我们第一步要准确定位到我们需- 要信息所在的标签。

Step.2 从定位的标签中提取我们需要的信息(一般在属性或者在string中)

Step.3 对于提取数据的简单处理

2.使用beautifulsoup提取丁香园论坛的回复内容

2.1用户浏览器访问目标网站并检查目标内容所在标签

BeautifulSoup是一个可以将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4种:Tag、NavigableString、BeautifuSoup和Comment。

下面边爬取论坛边介绍每个对象的意义以及方法。

目标网址:

按F12可看见网站结构及回复内容所在标签如下图:

image.png

2.2获取回复内容和用户名

我们所需的评论内容就在td class="postbody"标签下,利用BeautifulSoup获取内容

content = data.find("td", class_="postbody").text

我们需要的用户名在

标签下,利用BeautifulSoup获取内容

name = data.find("div", class_="auth").text

find函数用法:

find(name, attrs, recursive, text, **wargs)    # recursive 递归的,循环的

这些参数相当于过滤器一样可以进行筛选处理。不同的参数过滤可以应用到以下情况:

查找标签,基于name参数

查找文本,基于text参数

基于正则表达式的查找

查找标签的属性,基于attrs参数

基于函数的查找

附源码:

import urllib.request

from bs4 import BeautifulSoup as bs

def main():

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "

"Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"

}

url = 'http://www.dxy.cn/bbs/thread/626626'

request = urllib.request.Request(url, headers=headers)

response = urllib.request.urlopen(request).read().decode("utf-8")

html = bs(response, 'lxml')

getItem(html)

def getItem(html):

datas = [] # 用来存放获取的用户名和评论

for data in html.find_all("tbody"):

try:

username = data.find("div", class_="auth").get_text(strip=True)

print(username)

content = data.find("td", class_="postbody").get_text(strip=True)

print(content)

datas.append((username,content))

except:

pass

print(datas)

if __name__ == '__main__':

main()

截图:

image.png

3.学习xpath,使用lxml+xpath提取内容

什么是 XPath?

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。

下面列出了最有用的路径表达式:

表达式

描述

nodename

选取此节点的所有子节点

/

从根节点选取

//

从匹配选择的当前节点选择文档中节点,从而不考虑节点的位置

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

Xpath中text(),string(),data()的区别如下:

text()仅仅返回所指元素的文本内容。

string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。

data()大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。

4.使用xpath提取丁香园论坛的回复内容

# _*_ coding:utf-8 _*_

from contextlib import closing

import requests, json, re, os, sys, random, time

from urllib.request import urlopen

import urllib

from lxml import etree

class getUrl(object):

def __init__(self):

self.headers={

"Connection": "keep-alive",

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

"Accept-Encoding": "gzip, deflate",

"Accept-Language": "zh-CN,zh;q=0.9"

};

def run(self):

url = "http://www.dxy.cn/bbs/thread/626626"

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

html = req.text

tree = etree.HTML(html)

user = tree.xpath('//div[@class="auth"]/a/text()')

content = tree.xpath('//td[@class="postbody"]')

result = []

for i in range(0,len(user)):

#print(content[i])

print(content[i].xpath('string(.)'))

print(user[i].strip()+":"+content[i].xpath('string(.)'))

print('*'*80)

if __name__ == '__main__':

geturl = getUrl()

geturl.run()

截图:

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css 模拟器方向_GDS变方向动态循环单剪实验系统VDDCSS

原标题:GDS变方向动态循环单剪实验系统VDDCSS变方向循环简单剪切(VDDCSS)允许在两个方向进行简单剪切,而不是标准单向。这通过具有作用于其上的次级剪切作动器来实现,此剪切作动器与主剪切作动器相差90度排布。当用作可变方向的机器时&#x…

win10安装ipython_windows10下安装IPython notebook 用来查看.ipynb文档

在github下有部分文档是以.ipynb格式存档的,所以在windows10环境下安装IPython notebook,期间遇到一些问题记录下来。步骤:1、到python.org去下载python3.5.msi,因为是windows环境python2.7就算了吧2、将python3.5配置进环境变量(安装时选择加…

antd table动态表头_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...

1、固定表头后表体列和表头不对齐此问题可能在antd3.24.0版本以前都存在,反正3.16.2版本是存在这个问题的,若是是3.24.0以前的版本估计只能经过修改css样式解决。css按照官网说的:react一、若列头与内容不对齐或出现列重复,请指定…

python slice类型_复合类型Slice python中的list

# GO types Slice### Author 品茶> Slice(切片)代表变长的序列,序列中每个元素都具有相同的类型,slice类型写成[]T,T代表slice中元素的类型,slice的语法和数组很像> 只是没有固定长度而已。> slice的底层引用一个数组对象…

vue通过class获取dom_.NET Core通过Json或直接获取图形验证码(务必收藏备用)

(给DotNet加星标,提升.Net技能)转自:殷慈航cnblogs.com/jiyuwu/p/11803979.html很多人写的博客大家看了会一知半解,不知道怎么用,应该引用什么类库或者代码不全,这样很多小白很是头疼,尤其是尝新技术更是如…

c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本

相信很多同学在初学C语言时候,都会遇到遇到一个问题:指针,永远的神!好消息,这个痛点将会在这篇文章得到解决,妈妈再也不用担心我的学习了!一说指针,第一反应,指针是一种数…

安卓menu页面跳转_微信安卓版7.0.14内测!“发现小程序”页面大改版

除了安卓用户心心念念的“群备注”,“发现-小程序”面板也有大变动~话不多说,赶紧下载内测版体验新功能(后台回复【7014】,即可获取内测版下载链接)群备注:虽迟但到此前iOS版微信率先上线的新功能,这次在安卓内测版中也…

查看mysql 日记 工具_mysqlbinlog(日志管理工具)

mysqlbinlog用于处理二进制的日志文件,如果想要查看这些日志文件的文本内容,就需要使用mysqlbinlog工具。1.mysqlbinlog命令的语法shell > mysqlbinlog [options] logfile1 logfile2 ...2.mysqlbinlog的选项-d, --databasename 仅显示指定数据库的转储…

python实现ping命令_[小菜随笔]python tkinter实现简单的ping命令

本文主要是介绍python图形界面上的按键与实际功能的对接,其实编程掌握了基础之后的学习应该都是靠自己去挖掘其他的在网上发现多半教程都是2的,故本文使用的是python3.5,其实也没什么区别,就有一些支持库改变而已首先我们使用pyth…

删除 索引 外键 mysql_MySQL无法删除外键约束中所需的索引

MySQL无法删除外键约束中所需的索引我需要更改现有数据库以添加列。 因此,我还想更新UNIQUE字段以包含该新列。 我试图删除当前索引但仍然收到错误MySQL Cannot drop index needed in a foreign key constraintCREATE TABLE mytable_a (ID TINYINT NOT NULL AUTO_IN…

python decorator_python 中的decorator

python 中decorator的作用就是一个包装的作用,所谓包装指在执行真正的函数之前或者之后,我们可以有一些额外的发挥余地。decorator形式如下def dec(arg1):print("dec",arg1)def func_replace(func):print("func_replace",func)def c…

css before after用法_CSS 伪元素基础知识:content 与counter 实用技巧(二)

在CSS 伪元素基础知识:before 与after (一),笔者已经介绍过 CSS 里的::before 和::after 这两个伪元素,以及content 相关的用法,这篇将针对content 搭配counter (计数器) 进行一些有趣的应用,相信熟练之后搞不好能做出…

python pandas缺失值处理_Pandas之缺失值处理

原标题:Pandas之缺失值处理本文作者:杨长青本文编辑:周聪聪技术总编:张学人好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合…

c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

在C语言程序开发中,动态内存分配是不可避免的,而调用 malloc()/free() 库函数实现这一过程是方便的,事实上,在很多C语言程序中,malloc/free 库函数的使用相当频繁,它俩的C语言函数原型如下,请看…

python奖励多少钱_关于python的问题,好的高奖励!

我想设计一个猜数字程序:系统随机生成一个四位数a,之后用户也输入一个四位数b,这里,将进行判断:b中各个数位上的数字是否在a出现,有出现,那么将b中的那个数为上的数字定位Y......(简略...我想设计一个猜数字程序:系统随机生成一个四位数a,之后用户也输入一个四位数b,这里,将进行…

如何在mysql中添加用户_如何给mysql数据库添加一个用户

首先以root身份登录到MySQL服务器中。$ mysql -u root -p当验证提示出现的时候,输入MySQL的root帐号的密码。创建一个MySQL用户使用如下命令创建一个用户名和密码分别为"myuser"和"mypassword"的用户。mysql> CREATE USER myuserlocalhost I…

python可视化图表工具_酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具...

原标题:酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己的那一款。今天就来聊聊五个Python数据可视化…

mysql datetime最小值_MySQL的5种时间类型的比较

日期时间类型占用空间日期格式最小值最大值零值表示DATETIME8 bytesYYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00TIMESTAMP4 bytesYYYY-MM-DD HH:MM:SS197001010800012038 年的某个时刻00000000000000DATE4 bytesYYYY-MM-DD1000-01-019999-1…

python制作海报_生成海报(前端 | python)

我最近没有摸鱼,一直都在工作。只不过目前需要爬一点数据 python 做的,之后看机会分享一下。忙着忙着老大说要生成海报,有个活动要给每个用户来个分享图。想法PS 批处理?脚本? 能甩出去的活都甩出去,机智如…

Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。数据备份与还原第一篇分享给大家,具体内容如下基础概念:备份,将…