首页 > 编程语言 >Python网络爬虫的实现,要想学编程,首先的把爬虫学好!

Python网络爬虫的实现,要想学编程,首先的把爬虫学好!

时间:2024-06-22 15:31:10浏览次数:28  
标签:curr Python 数据库 db 爬虫 replace cursor my 想学

爬虫实现

1.爬虫初步实现

(1)我们爬取中国化工市场机械网,以下为相关代码演示

import requests
from bs4 import BeautifulSoup
    res = requests.get(addresses[i])
    res.encoding = 'GB18030'  # 通过修改编码方式为GB18030,兼容网站编码(gb2312)
    # 这里的'html.parser'是为了告诉BeautifulSoup这个html_sample的解析形式是html格式#
    soup = BeautifulSoup(res.text, 'html.parser')
    article_content = soup.select(
        '#NewsMainLeft > div.mainBox.MarginTop10.articleBox > div.article > div.ArticleMatter')
    article_title = soup.select(
        '#NewsMainLeft > div.mainBox.MarginTop10.articleBox > div.article > div.articleTitle > h1')

此处select()中的内容,可以使用chrome浏览器的开发者模式,选中该标签,右键copy->copy selector,再复制到select()中,更精确。

利用print()方法可以将爬下来的字段打印出来。

但是只可以爬取单一网址下的内容,如果想批量爬取改网站文章,就需要多次更改爬取的网址,不合理。

(2)我发现有两个办法可以实现批量的爬取

  • 发现网址之间的规律,使用循环每次更改网址,但是使用中发现网址的变化有时会脱离规律,在运行过程中会出现一些错误,因此不推荐使用该方法。
  • 另一种方法是:再爬取网站内的下一篇的<a>标签内的href属性,作为返回值,使用到下一次循环当中。如下代码演示:
    next_address = soup.select(
        '#NewsMainLeft > div.mainBox.MarginTop10.articleBox > div.article > div.arNext > a[href]')

2. 爬取文本初步整理

爬取下来的文本,我发现有一些位置出现不必要的字符、回车等,这些如果无法处理,将影响到后期存储数据,故需要清除,代码如下:

    for s in article_title:
        delete = str(s.contents)
        title = delete.replace('[\'', '').replace('\']', '').replace('\\r', '').replace('\\n', '').replace('\\t', '')\
            .replace('\\', '').replace('/', '').replace(':', '').replace('*', '').replace('?', '').replace('\"', '')\
            .replace('<', '').replace('>', '').replace('|', '')
    for t in article_content:
        delete = str(t.contents)
        context = delete.replace('[\'', '').replace('\']', '').replace('\\r', '').replace('\\n', '').replace('\\t', '')\
            .replace('\\u3000', '').replace('\', <br/>,', '').replace('<br/>, \'', '').replace('<br/>,', '')\
            .replace('<br/>', '').replace('</p>', '').replace('<p>', '').replace(' ', '').replace('\'', '').lstrip('\'')
    title_and_context = title+'。'+context
    if title_and_context[len(title_and_context)-1] == "\'":
        title_and_context = title_and_context[:len(title_and_context)-1] + ''

经过上述处理,文本信息初步处理完毕

文章存储

(1)涉及编码问题,首先,被爬取的网页的编码为gb2312,但是在爬取过程中,如:“槃”字仍无法识别报错,我将爬虫的爬取编码设为gb18030,问题解决。gb18030是gb2312和gbk编码扩大后的编码格式,支持的汉字更多。

(2)数据库也需要设置,通常,mysql默认建立数据库和表的编码是utf-8,在这里,我改成gb18030防止存入数据库时出错.

                    如上图的设置

(3)保存为.txt

# 保存到文本文件当中
def save_files(path, curr_file_name, curr_content):
    if os.path.exists(path):       # 判断文件夹是否存在
        os.chdir(path)             # 进入文件夹
    elif os.getcwd()[-len(path):] == path:
        print("本篇文章已存入")
    else:
        os.mkdir(path)                 # 创建文件夹
        os.chdir(path)                 # 进入文件夹
    f = open(curr_file_name, 'w', encoding='GB18030')
    f.write(curr_content)
    f.close()
    print(os.getcwd())

(4)保存到数据库

  • 建立数据库连接
util.py
import mysql.connector

def get_connect(curr_host, curr_user, curr_passwd, curr_database):
    my_db = mysql.connector.connect(
        host=curr_host,       # 数据库主机地址
        user=curr_user,            # 数据库用户名
        passwd=curr_passwd,           # 数据库密码
        database=curr_database  # 进入数据库
    )
    my_cursor = my_db.cursor()
    return my_cursor, my_db
  • 创建数据库
import mysql.connector
# my_cursor.execute("CREATE DATABASE articles_db")
# my_cursor.execute("USE articles_db")
my_db = mysql.connector.connect(
        host="localhost",       # 数据库主机地址
        user="root",            # 数据库用户名
        passwd="123",           # 数据库密码
        database="articles_db"  # 进入数据库
    )
my_cursor = my_db.cursor()

my_cursor.execute(
     "CREATE TABLE articles_tb (id INT AUTO_INCREMENT PRIMARY KEY, htmlId varchar(255), context MEDIUMTEXT)")
  • 保存到数据库中
# 保存到mysql中
def save_files_to_mysql(curr_file_name, curr_content):
    my_cursor, my_db = util.get_connect("localhost", "root", "123", "articles_db")
    sql_1 = "INSERT INTO articles_tb (htmlId,context)VALUES(\'"
    sql_2 = "\',\'"
    sql_3 = "\')"
    sql = sql_1+curr_file_name+sql_2+curr_content+sql_3
    print("sql:" + sql)
    my_cursor.execute(sql)
    my_db.commit()              # 提交到数据库执行,必须一步勿忘
    my_cursor.close()
    my_db.close

最后,如果你对Python感兴趣,想要学习python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的:                       

 

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

**学习资源已打包,需要的小伙伴可以戳这里:【学习资料】 

标签:curr,Python,数据库,db,爬虫,replace,cursor,my,想学
From: https://blog.csdn.net/Python_Alex/article/details/139883108

相关文章

  • python: fucontion
     defsixteenFoo(k):"""十六進制:paramk::return:"""fstr=''ifk==10:fstr="A"elifk==11:fstr="B"elifk==12:fstr=&q......
  • .Net开发 ,Java开发 ,python开发 数据库开发,开发相关工具
    开发电脑安装相关工具软件Java开发Java编程、高级编程、面试题资料Python编程,网络编程,爬虫,面试,设计资料数据库mysql,sqlservice,sql优化资料C#语言、.Net开发、.Net高级编程资料......
  • 新闻管理与推荐系统Python+Django+协同过滤推荐算法+管理系统
    一、介绍新闻管理与推荐系统。本系统使用Python作为主要开发语言开发的一个新闻管理与推荐的网站平台。网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求,并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后端的数据通信。......
  • 一起学python,挑战年薪30w
     哈喽!各位小伙伴们大家好,以下是为大家准备的学习编程的方法和心得,让你挑战年薪30万不是梦!!!!!Python编程之旅:新手学习心得与方法探索踏入Python编程的世界,对我而言,既是一次全新的探索,也是一场与未来对话的冒险。在这个数字化飞速发展的时代,编程能力不再只是程序员的必备技能,它......
  • 【深度学习】python之人工智能应用篇——图像生成技术(二)
    说明:两篇文章根据应用场景代码示例区分,其他内容相同。图像生成技术(一):包含游戏角色项目实例代码、图像编辑和修复任务的示例代码和图像分类的Python代码示例图像生成技术(二):包含简化伪代码示例、使用GAN生成医学图像代码示例和使用GAN生成产品展示图代码示例图像生成是......
  • Python发送HTML邮件有哪些步骤?怎么设置?
    Python发送HTML邮件如何实现?Python发送邮件的策略?HTML邮件不仅可以包含丰富的文本格式,还可以插入图片、链接和其他多媒体内容,从而提升邮件的美观性和功能性。AokSend将详细介绍Python发送HTML邮件的主要步骤,帮助开发者轻松实现这一功能。PHP发送HTML邮件:设置服务每个SMTP服......
  • Python 冒泡排序
    冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。以下是一个用Python实现的冒泡排序算法的例子:pythondefbubble_sort(lst):n=len......
  • 让你的 Python 代码更快的小技巧
    我们经常听到“Python太慢了”,“Python性能不行”这样的观点。但是,只要掌握一些编程技巧,就能大幅提升Python的运行速度。今天就让我们一起来看下让Python性能更高的9个小技巧python学习资料分享(无偿):字符串拼接的技巧如果有大量字符串等待处理,字符串连接将成为......
  • Python高效内存访问,memoryview这个神器你值得拥有!
    目录1、初识memoryview......
  • 机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考
    最近在用python进行机器学习实践,在做到特征选择这一部分时,对于SelectPercentile和SelectKBest方法有些不理解,所以去了查看了帮助文档,但是在帮助文档的例子中出现了"chi2",没接触过,看过去就更懵了,查了一下资料知道"chi2"是在求卡方值,又没接触过,我整个人都裂了,但是还是耐着性子去......