继前几篇文章大量前期知识的铺垫之后,我们今天来一次模拟实践。
在之前的文章当中,我们从如何获取数据,解析数据,到储存数据,都一一进行了详细的解释,在这篇文章当中我们将前期所学的知识进行一次实践性的汇总。
从URL 开始,和 hashlib 进行访问,然后将解析、获取、压缩、和 Beautiful soup 进行引入 ,将 Redis 存储数据模块进行载入。
一个简单的爬虫程序开头就是如此,具体的代码如下:
from hashlib import SHA1
from urllib.parse import urljoin
import pickle
import re
import requests
import zlib
from bs4 import BeautifulSoup
from redis import Redis
上面这些代码就是上面所说的所有模块引入后的样子。
有了模块代码以后,就可以开始模拟了。
爬虫就是要爬取信息,在目前国内的网站里,知乎就是一个不错的信息网站。(毕竟是国内最大分享故事网站)我们来进行一个知乎问题的爬取代码。
具体的代码如下:
def main():
# 指定种子页面
base_url = 'https://www.zhihu.com/'
seed_url = urljoin(base_url, 'explore')
# 创建Redis客户端
client = Redis(host='8.8.8.8', port=6379, password='qingnian')
# 设置用户代理
headers = {'user-agent': 'baiduspider'}
# 通过requests模块发送GET请求并指定用户代理
resp = requests.get(seed_url, headers=headers)
# 创建BeautifulSoup对象并指定使用RE作为解析器
soup = BeautifulSoup(resp.text, 're')
href_regex = re.compile(r'^/question')
# 将URL处理成摘要
hasher_proto = sha1()
# 查找所有href属性以/question打头的a标签
for a_tag in soup.find_all('a', {'href': href_regex}):
# 获取a标签的href属性值并组装完整的URL
href = a_tag.attrs['href']
full_url = urljoin(base_url, href)
# 传入URL生成SHA1摘要
hasher = hasher_proto.copy()
hasher.update(full_url.encode('utf-8'))
field_key = hasher.hexdigest()
# 如果Redis的键'zhihu'对应的hash数据类型中没有URL的摘要就访问页面并缓存
if not client.hexists('zhihu', field_key):
html_page = requests.get(full_url, headers=headers).text
# 对页面进行序列化和压缩操作
zipped_page=zlib.compress(pickle.dumps(html_page))
# 使用hash数据类型保存URL摘要及其对应的页面代码
client.hset('zhihu', field_key, zipped_page)
# 显示总共缓存了多少个页面
print('Total %d question pages found.' % client.hlen('zhihu'))
if __name__ == '__main__':
main()
上述的代码就是前面的几篇文章所说的所有内容,是不是有一点困惑,没事,一开始的应用总是让人头疼的,我们在今后的学习中,这种代码多得是。
知识的学习,在实际的应用当中总是会出现问题,这篇文章主要的意义就是让大家熟悉一下真实的代码是什么样的,最近的文章都是关于爬虫的,所以爬虫是一定会学会并应用的。
如果想学习更多科技知识,可以点击关注。
如果对文章中的内容有什么困惑的地方,可以在评论区提出自己的问题,学记同大家一起交流,解决各种问题,一起进步。
青年学记 陪伴着各位青年
作者:青年学记 一名不断进步的程序猿
一起学习 一起进步
走向自立
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved