Python爬虫(二)

1. 学习Beautifulsoup

关于Beautifulsoup的安装,windows用户可以使用pip进直接安装

Beautiful Soup库是解析、遍历、维护“标签树”的功能库

引入Beautifulsoup库
from bs4 import Beautifulsoup

使用beautifulsoup提取内容
soup = BeautifulSoup('<p>data</p>', 'html.parser')

关于BeautifulSoup库的第二个参数 解析器 有以下几种:

解析器使用方法条件
bs4的HTML解析器BeautifulSoup(mk,‘html.parser’)安装bs4库
lxml的HTML解析器BeautifulSoup(mk,‘lxml’)pip install lxml
lxml的XML解析器BeautifulSoup(mk,‘xml’)pip install lxml
html5lib的解析器BeautifulSoup(mk,‘html5lib’)pip install html5lib

关于BeautifulSoup库的 基本元素 有以下几种:

基本元素说明
Tag标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾
Name标签的名字,<p>…</p>的名字是’p’,格式:<tag>.name
Attributes标签的属性,字典形式组织,格式:<tag>.attrs
NavigableString标签内非属性字符串,<>…</>中字符串,格式:<tag>.string
Comment标签内字符串的注释部分,一种特殊的Comment类型

关于BeautifulSoup库遍历标签树,有下图提供的几种方法:
在这里插入图片描述
想了解各个方法的具体用法前点击这里!

为了让HTML界面更友好的显示,BeautifulSoup库提供了prettify()方法:

  • .prettify()为HTML文本<>及其内容增加更加’\n’
  • .prettify()可用于标签,方法:<tag>.prettify()

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

丁香园直通点:http://www.dxy.cn/bbs/thread/626626#626626

提取我们所需要的信息前,我们需要对网页进行一定的分析,找出我们所需要的信息所在的地方,前面目标网站,按F12,定位回复内容的位置。
在这里插入图片描述
我们所需的评论内容就在td class="postbody"标签下,利用BeautifulSoup获取内容
content = data.find("td", class_="postbody").text

find函数用法:
在这里插入图片描述

import requests
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 = requests.get(url, headers=headers)
    request.encoding = request.apparent_encoding
    response = request.content
    html = bs(response, 'lxml')
    getItem(html)
def getItem(html):
    datas = [] # 用来存放获取的用户名和评论
    for data in html.find_all("tbody"):
        try:
            userid = data.find("div", class_="auth").get_text(strip=True)
            print(userid)
            content = data.find("td", class_="postbody").get_text(strip=True)
            print(content)
            datas.append((userid,content))
        except:
            pass
    print(datas)



if __name__ == '__main__':
    main()

运行结果如图:
在这里插入图片描述

2. 学习xpath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。

2.1 使用xpath提取丁香园论坛的回复内容。

xpath中路径表达式:
在这里插入图片描述

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

  • text()仅仅返回所指元素的文本内容。
  • string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。
  • data()大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。

由于步骤与使用BeautifulSoup库类似,故直接上代码:

import requests
from lxml import etree
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
'referer':"http://www.dxy.cn/bbs/thread/626626#626626" }

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

ht_response = requests.get(url,headers=headers)
ht_response = ht_response.text
tree = etree.HTML(ht_response)
id=tree.xpath('//div[@class="auth"]/a/text()')
content = tree.xpath('//td[@class="postbody"]')
for i,j in zip(id,content):
	print(i + " : " + j.xpath('string(.)').strip())

参考资料:https://blog.csdn.net/naonao77/article/details/88129994
参考资料:https://blog.csdn.net/wwq114/article/details/88085875
参考资料:https://www.icourse163.org/learn/BIT-1001870001?tid=1003245012#/learn/announce

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值