Python爬虫从入门到精通——入门案例01[发送网络请求,解析网页的三种方式]

爬取古诗文网首页的所有诗文的名称

网页的地址是:https://so.gushiwen.org/gushi/tangshi.aspx

在这里插入图片描述上面就是网页源码经过浏览器渲染之后的样子
在上面的页面,点击鼠标右键,点击查看网页源码或者View Page source,向下滑动就可以看到:
在这里插入图片描述我们就是要提取上面网页源码中的所有诗词的名称,下面看下面代码,有详细的代码解释

用正则表达式提取文字

from urllib import request
import re
# urllib是进行Python爬虫一个非常重要的库,它可以用来发送各种请求

url = 'https://so.gushiwen.org/gushi/tangshi.aspx' # 资源的所在位置

response = request.urlopen(url)
'''
该函数是向url所在的服务器发送请求,返回的response是服务器返回的一个响应对象
因为无论是浏览器还是代码向服务器发送一个请求,都需要服务器返回一个响应,得到响应就是
我们发送请求的目的
'''
html = response.read() #这个read函数就是将从服务器得到的东西(如二进制文件,html,json文件)以字符串的形式返回

# 但是需要注意这里的字符串都是byte类型的字符串,因此需要进行解码 如果此处不明白作者会在本博客最下部进行解释
html = html.decode("utf-8")
# 这样之后html才是我们正常使用的字符串了
# 既然是字符我们就可以使用正则表达式进行解析

titles = re.findall(r'target="_blank">([\u4e00-\u9fa5]+)</a>', html)

for title in titles[1:]: # 因为得到的第一个不是诗文的名称,所以从第二个开始打印
    print(title)

用Beautifulsoup解析html源码

在网页上右击点击检查得到如下照片
在这里插入图片描述所有的诗词都在结点a中

from urllib import request
from bs4 import BeautifulSoup
# BeautifulSoup是用来解析网页源码非常好的一个库
# urllib是进行Python爬虫一个非常重要的库,它可以用来发送各种请求

url = 'https://so.gushiwen.org/gushi/tangshi.aspx' # 资源的所在位置

response = request.urlopen(url)
'''
该函数是向url所在的服务器发送请求,返回的response是服务器返回的一个响应对象
因为无论是浏览器还是代码向服务器发送一个请求,都需要服务器返回一个响应,得到响应就是
我们发送请求的目的
'''
html = response.read() #这个read函数就是将从服务器得到的东西(如二进制文件,html,json文件)以字符串的形式返回

# 但是需要注意这里的字符串都是byte类型的字符串,因此需要进行解码 如果此处不明白作者会在本博客最下部进行解释
html = html.decode("utf-8")
# 这样之后html才是我们正常使用的字符串了
# 既然是字符我们就可以使用正则表达式进行解析

soup = BeautifulSoup(html,"lxml") # 用lxml方式解析html,得到结果对象

nodes = soup.find_all('a',attrs={'target':"_blank"})
# 找到所有a结点,由于部分a结点可能不满足要求所以需要根据结点a的属性进行筛选,根据结点a的属性来筛选
# 根据网页检查得到信息可知'target'满足其等于"_blank"

for x in nodes[1:]: # 第一个结点不满足
    # print(x.get_text()) # 得到该结点的字符串文字 或者下面的方式也可以
    # print(x.string)
    print(x.contents[0]) 

用xpath方法提取字符串文字

from urllib import request
from lxml import etree
# etree是用来解析xml文件很好的库,也可以解析html
# urllib是进行Python爬虫一个非常重要的库,它可以用来发送各种请求

url = 'https://so.gushiwen.org/gushi/tangshi.aspx' # 资源的所在位置

response = request.urlopen(url)
'''
该函数是向url所在的服务器发送请求,返回的response是服务器返回的一个响应对象
因为无论是浏览器还是代码向服务器发送一个请求,都需要服务器返回一个响应,得到响应就是
我们发送请求的目的
'''
html = response.read() #这个read函数就是将从服务器得到的东西(如二进制文件,html,json文件)以字符串的形式返回

# 但是需要注意这里的字符串都是byte类型的字符串,因此需要进行解码 如果此处不明白作者会在本博客最下部进行解释
html = html.decode("utf-8")
# 这样之后html才是我们正常使用的字符串了
# 既然是字符我们就可以使用正则表达式进行解析

HTML = etree.HTML(html) # 根据字符串得到etree的结构树

titles = HTML.xpath('/html/body//div[@class="typecont"]//span/a/text()') # 利用xpath规则来得到信息
# 读者自己需要先行学习xpath规则
for x in titles:
    print(x)

下面就来解释一下Python中的编码和字符串:

# 常见的编码法有utf-8, utf-16, gbk, gbg2312等等


# python中的字符串有两种字符串一个是bytes和unicode字符串

# unicode字符串需要经过编码(encode)变成bytes类型字符串

# bytes类型字符串需要经过解码(decode)变成unicode字符串
demo_string1 = b'zhongguo' # bytes字符串只能含有ACSII码能表示的字符,不能含有中文

demo_string2 = 'zhongguo'

print(demo_string1)

print(demo_string2)

print(type(demo_string1))
print(type(demo_string2))

print(demo_string1.decode("utf-8", "ignore")) # 以utf-8编码方式节解码,忽略不能解码的地方(第二个参数的作用)
print(demo_string2.encode("utf-8", "ignore")) # 以utf-8编码方式节编码,忽略不能编码的地方(第二个参数的作用)
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值