爬虫第二次打卡

一、BeautifulSoup库

BeautifulSoup的概念和入门

什么是BeautifulSoup?

Beautiful Soup 是一个HTML/XML的解析器,主要用于解析和提取 HTML/XML 数据。它基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。
BeautifulSoup 用来解析HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持lxml 的 XML解析器。虽然说BeautifulSoup4简单容易比较上手,但是匹配效率还是远远不如正则以及xpath的,一般不推荐使用,推荐正则的使用。

安装和导入BeautifulSoup

第一步:如果使用 Anaconda Jupyter Notebook 可以直接打开 Anaconda Powershell Prompt(或者 Anaconda Prompt),然后输入 conda install beautifulsoup4(这里是因为版本问题,只能安装bs4,其他的都会报错)。如果使用 IDLE 可以打开命令指示符(cmd),然后用
pip 来更新:pip install beautifulsoup4。安装完成之后就到下一步。

第二步:使用这个bs库之前需要引用:from bs4 import BeautifulSoup。

第三步:创建 Beautiful
Soup对象 soup =BeautifulSoup(html,‘html.parser’)。

三、正则表达式 re

1、为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
学习正则表达式 rere库的主要功能函数:
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.search(pattern, string, flags=0)
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.match(pattern, string, flags=0)
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.findall(pattern, string, flags=0)
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.split(pattern, string, maxsplit=0, flags=0)
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.finditer(pattern, string, flags=0)
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

xpath

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

使用xpath提取丁香园论坛的回复内容。
抓取丁香园网页:http://www.dxy.cn/bbs/thread/626626#626626 。
2. Xpath常用的路径表达式:
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
XML文档是被作为节点树来对待的。
XPath使用路径表达式在XML文档中选取节点。节点是通过沿着路径选取的。

3.使用lxml解析
4.实战:爬取丁香园-用户名和回复内容

# 导入库
from lxml import etree
import requests

url = "http://www.dxy.cn/bbs/thread/626626#626626"
req = requests.get(url)
html = req.text
# html
tree = etree.HTML(html) 
tree
user = tree.xpath('')
# print(user)
content = tree.xpath('')
results = []
for i in range(0, len(user)):
    # print(user[i].strip()+":"+content[i].xpath('string(.)').strip())
    # print("*"*80)
    # 因为回复内容中有换行等标签,所以需要用string()来获取数据
    results.append(user[i].strip() + ":  " + content[i].xpath('string(.)').strip())
for i,result in zip(range(0, len(user)),results):
    print("user"+ str(i+1) + "-" + result)
    print("*"*100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值