用python爬取网页内容_用python爬取网页文本内容,让你快速浏览网站内容

用python爬取网页内容_用python爬取网页文本内容,让你快速浏览网站内容大家好 我是咿哑呀 今天我教大家学习网络爬虫 这个爬虫能够爬取网页文本内容 提高大家浏览网页的速度 下面我把代码贴出 大家仔细研究 fromurllibim parsefromurl parseimportq

大家好,我是咿哑呀。今天我教大家学习网络爬虫,这个爬虫能够爬取网页文本内容,提高大家浏览网页的速度。下面我把代码贴出,大家仔细研究:

from urllib import request, parse

from urllib.parse import quote

import string

import chardet

from bs4 import BeautifulSoup

import re

import time

967c2a861a67799a79c13f79420c9723.png

# 创建类

class spider:

# 构造函数 初始化

def __init__(self, my_root_url, title_tag, con_tag, OutputFile):

self.new_urls = set() # 待爬取的url

self.old_urls = set() # 已爬取的url

self.datas = [] # 存放搜集的数据

# 添加一个到url中

self.add_new_url(my_root_url)

count = 1

while self.has_new_url():

try:

new_url = self.get_new_url()

print(‘%d、爬取 %s’ % (count, new_url))

html_context = self.download(new_url)

new_urls, new_data = self.get_new_urls_data(new_url, html_context, title_tag, con_tag)

self.add_new_urls(new_urls)

self.output_html(new_data, OutputFile)

count += 1

time.sleep(1)

except():

print(“爬取失败”)

def download(self, new_url):

if new_url is None:

return None

headers = (“User-Agent”,

“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063”)

opener = request.build_opener()

opener.addheaders = [headers]

request.install_opener(opener)

# 解决请求路径中含义中文或特殊字符

url_ = quote(new_url, safe=string.printable)

if request.urlopen(url_).getcode() != 200:

return None

else:

html = request.urlopen(url_).read()

charset = chardet.detect(html)[‘encoding’]

return html.decode(charset, ‘ignore’)

97747accf0a412d152595104c21ef3cf.png

def output_html(self, new_data, OutputFile):

if new_data is None:

return

self.datas.append(new_data)

for data in self.datas:

if data[‘title’] and data[‘con’] and data[‘url’]:

fout = open(OutputFile+’\\’+data[‘title’].replace(‘ ‘, ”).replace(‘\n’,”)+’.txt’, ‘w’, encoding=’utf8′)

fout.write(‘%s’ % data[‘title’].replace(‘ ‘, ”).replace(‘\n’,”))

fout.write(‘%s’ % data[‘con’].replace(‘ ‘, ”))

fout.write(‘(来源:%s)’ % data[‘url’])

fout.close()

def get_new_urls_data(self, page_url, html_context, title_tag, con_tag):

if page_url is None or html_context is None:

return

new_urls = set()

red_data = {}

soup = BeautifulSoup(html_context, “html.parser”)

pat = re.compile(‘.htm|.asp’)

links = soup.find_all(href=pat)

for link in links:

if page_url not in link[“href”]:

new_url = link[“href”]

new_full_url = parse.urljoin(page_url, new_url)

new_urls.add(new_full_url)

red_data[‘url’] = page_url

if soup.find(class_=title_tag[0]):

title_node = soup.find(class_=title_tag[0])

if title_node.get_text():

red_data[‘title’] = title_node.get_text()

else:

red_data[‘title’] = “”

else:

red_data[‘title’] = “”

con_node = soup.find(class_=con_tag[0])

if con_node:

red_data[‘con’] = con_node.get_text()

else:

red_data[‘con’] = “”

return new_urls, red_data

49ff280a9dd8f793af054c77d3f73792.png

# 向管理器中添加一个新的url

def add_new_url(self, my_root_url):

if my_root_url is None:

return

if my_root_url not in self.new_urls and my_root_url not in self.old_urls:

self.new_urls.add(my_root_url)

# 向管理器中添加批量新的url

def add_new_urls(self, urls):

if urls is None or len(urls) == 0:

return

for url in urls:

self.add_new_url(url)

# 判断是否有新的待爬取的url

def has_new_url(self):

return len(self.new_urls) != 0

# 获取一个待爬取的url

def get_new_url(self):

new_url = self.new_urls.pop()

self.old_urls.add(new_url)

return new_url

49ff280a9dd8f793af054c77d3f73792.png

代码的主要意思就是先导入一些必须的库,然后创建一个爬虫类,下面的主函数就是运用这个类进行爬取网页文本的:

# 创建main方法

if __name__ == “__main__”:

root_url = “http://www..cn”

#

标题式样

title_tags = [‘page_bt’]

#

正文式样

con_tags = [‘page_wznr_2’]

output_dir = ‘out’

spider(root_url, title_tags, con_tags, output_dir)

运行这个脚本后,爬取的内容就全部在在目录out下啦。如果这篇文章对你有用,请点赞、转发、收藏、评论,如果喜欢我的文章,请搜索并关注“咿哑呀”,我将分享更多文章给大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228289.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:22
下一篇 2026年3月16日 下午7:22


相关推荐

  • mini usb接口图片_linux查看接口速率

    mini usb接口图片_linux查看接口速率华硕X450V笔记本更换intelAX200无线网卡@TOC下面内容以更换AX200为主要内容,还涉及无线网卡接口(minipcie和m.2/ngff),网线,路由器,无线网卡天线,AX200驱动(包括刷Killer驱动的问题,不建议刷!!!,没什么卵用)等与网卡性能相关的内容。目前使用情况是:有5G爽,信号强,连接速度高,稳定不掉线,网速快,有蓝牙爽歪歪。笔记本是2013年买的,老款了。换了三星860EVO500G,光驱改放机械,内存加了4G,成8G双通道,电池换了一次,又要换了。现在5Gw

    2025年10月6日
    6
  • Void开源编程神器!替代Cursor

    Void开源编程神器!替代Cursor

    2026年3月16日
    1
  • 多线程和多进程的区别_多线程 python

    多线程和多进程的区别_多线程 pythontarget:指定这个线程去哪个函数里面去执行代码args:指定将来调用函数的时候传递什么数据过去args参数指定的一定是一个元组类型importthreadingimporttimeg_nums=[1,2]deftest1(temp):temp.append(33)pri……

    2022年10月9日
    6
  • AI应用配置学习笔记

    AI应用配置学习笔记

    2026年3月17日
    2
  • webstorm2022.01激活码_最新在线免费激活[通俗易懂]

    (webstorm2022.01激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    1.1K
  • 全自动回复机器人_微信群机器人哪个好用

    全自动回复机器人_微信群机器人哪个好用本文转自:https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653558126&idx=1&sn=b1a87e62fc2ae0a3b2e775dadf263ccc&chksm=806e3bd3b719b2c5a83684476a5b33f341c72b4b4399153ee3a2466a83c43d3b1b…

    2026年4月17日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号