python爬虫

有关爬虫和存入数据库中的一些小问题,小bug

    开发任务:爬取某微信公众号上的相关文章 
    
    开发环境:python3.6 + MySQL5.7
    

    Part 1 :爬虫

        思路:首先我们要爬取微信公众号,首先想到的肯定是直接上网址,然后浏览器打开,分析页面结构,层层剥离,最后得到我们想要的数据。老实说,这倒是我接到这个任务的第一思路,然后我就屁颠屁颠的开始执行这个操作,打开微信,

       找到了那个微信公众号,打开历史消息微信客户端——很清晰,很明了:
    这里写图片描述

       这结构那是相当的棒,条理清晰,思路分明,暗中窃喜一波儿,然后开开心心的将网址,然后复制到浏览器打开,然后满心欢喜的准备分析结果来着,然后就没有然后了。。——意外发生了。。。。。

    这里写图片描述

       果然还是腾讯爸爸厉害一点。。真心没辙。。然后我网上找了找相关的解决方案,网上dalao们给出的建议是使用js脚本,将其中的一个参数is_wechat的值进行修改,然后就能够实现了。然而我对于js是相当的不熟悉。。仅仅停留在能够看懂语法的状态。。。然后这条路就被无情的被斩断了。。

       继续探究:好在我们有一个搜狗微信的外部网站之一帮助我们用来搜索微信公众号,这一下就很开心,找到了替代方案,终于不用愁容满面了。 然后我又一次屁颠屁颠的打开了,浏览器找到搜狗微信的网址,上面输入“影探”,很完美,找到了这个公众号,然后点击进去,哈哈哈,美滋滋
    这里写图片描述

       这样,我们就完成了,爬虫第一步的最开始的初始化的一步!!!美滋滋。

    这里写图片描述

       然后我们打开我们的F12,分析网页,查看数据。
    这里写图片描述

       ——火眼金睛,一次就发现这些数据是js动态加载的。。而且,我们需要的所有数据全部在一个变量msgList里面,更刺激的是!!!这个msgList天生一个json数据文件的模样!!!这岂不是天助我也!!!

       这下我们获取这个网页之后,通过正则匹配,直接将msgList的json数据格式文件直接取出来。然后再针对json数据进行解析,美哉!

       然后我们很成功的将以上的这个网址获取,使用正则表达式获取写出了以下的代码:

        from bs4 import BeautifulSoup
        import re
        import requests
        import json
        import jsonpath
        import pymysql
    
        headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
        # 这样分两次获得最后网址是因为,直接访问网址的话,那个网址具有时效性,一段时间之后那个网址就失效了
        originUrl = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query=%E5%B7%A5%E5%A4%A7%E6%A2%A6%E4%B9%8B%E7%BF%BC&ie=utf8&_sug_=n&_sug_type_='
        originHtml = requests.get(originUrl, headers = headers)
        bsObj = BeautifulSoup(originHtml.text, 'lxml')
        url = bsObj.find(class_ = 'tit').a['href']
    
        html = requests.get(url)
        soup = BeautifulSoup(html.text, 'lxml')
        pattern = re.compile(r'var msgList = {.*?};', re.I | re.M)
        script = soup.findAll('script')[8]
        msgList = pattern.findall(script.text)
        for msg in msgList:
            print(msg)
    
        #解析出正确的json格式文件
        mJson = msg[14:-1]

       然后根据正确的网址,我将其中的数据使用json进行解析。然后将数据准备存入数据库。

        loadJson = json.loads(mJson)
        # 一个描述的数组
        digest = jsonpath.jsonpath(loadJson, '$..digest')
        # 一个标题的数组
        title = jsonpath.jsonpath(loadJson, '$..title')
        # 一个图片的数组
        pic = jsonpath.jsonpath(loadJson, '$..cover')
        # 一个链接的url数组
        urls = jsonpath.jsonpath(loadJson, '$..content_url')

    Part 2 :存入数据库

       我们首先安装好MySQL,从官网上下载MySQL的安装包, 然后将压缩包进行解压,在bin目录之下打开cmd或者powershell,使用mysqld -initialize进行初始化进行操作。

       然后就输入mysql这个命令,结果,出现了以下的错误:

    `Access denied for user 'root'@'localhost'`
    

       这下可急坏我了,这样的操作可不是我们愿意见到的,拿出万能的工具,借助万能的网友的力量——百度,进行搜索,最后得到了好的解决方案——

       首先,直接在命令行输入以下的代码:

    `mysqld --skip-grant-tables`
    

       然后直接输入以下的代码:

    $ mysql                                                                                       
    Your MySQL connection id is 3                                                                 
    Server version: 5.7.21 MySQL Community Server (GPL)                                           
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights 
    reserved.                   
    Oracle is a registered trademark of Oracle Corporation and/or its                             
    affiliates. Other names may be trademarks of their respective                                 
    owners.                                                                                                                                                                                     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input 
    statement.                                                                                                               
    mysql> 

       然后就实现了操作。

        # 链接数据库
        conn = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'root', passwd = '', charset = 'utf8', db = 'test')
        cursor = conn.cursor()
    
        for i in range(len(digest)):
           sql = 'insert into app values(\"%s\", \"%s\", \"%s\", \"%s\")' % (digest[i], title[i], pic[i], urls[i])
           row = cursor.execute(sql)
    
        conn.commit()
    
        row1 = cursor.execute('select * from app')
        data = cursor.fetchall()
        print(data)
    
        conn.close()

       这就实现了存入数据库中。

       以上。

    ### Python爬虫的学习资源与使用方法 Python爬虫是一种高效的工具,用于自动化的网络信息采集。由于其丰富的库支持以及简洁易懂的语法特性,Python 成为了编写网络爬虫的最佳选择之一[^3]。 #### 学习Python爬虫的基础知识 学习Python爬虫不仅涉及理论知识的理解,还需要通过实际操作来加深印象。在移动设备上也可以轻松完成这些任务,因为手机端的Python环境配置较为简便,可以随时随地进行实践练习[^1]。 #### 推荐的Python爬虫教程列表 以下是几份高质量的Python爬虫教程推荐: - **基础篇** - 《一只小爬虫》[^2] - 《Python与简单网络爬虫的编写》[^2] - **进阶篇** - 《[Python]网络爬虫(五):urllib2的使用细节与抓站技巧》[^2] - 《[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)》[^2] - **高级功能** - 《Python爬虫——抓取网页并解析HTML》[^2] - 《Python正则表达式指南》[^2] 除了上述具体的文章外,《Python爬虫新手指南及简单实战》也是一份非常适合初学者的内容,其中包含了详细的案例分析和代码演示[^3]。 #### 实践中的关键技术点 当开始构建自己的第一个爬虫项目时,需要注意以下几个方面: 1. 数据请求模块的选择,比如`requests`或内置的`urllib`。 2. HTML页面解析技术的应用,例如BeautifulSoup或者lxml库。 3. 对于复杂的数据提取需求,则可能需要用到正则表达式的辅助[^2]。 下面展示一段简单的爬虫脚本作为参考: ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') titles = soup.find_all('h1') for title in titles: print(title.text.strip()) ``` 此段程序展示了如何访问目标网址,并从中提取所有的标题标签内容[^3]。 #### 工具扩展建议 如果计划进一步深入研究大数据量场景下的爬虫应用,那么像Pandas这样的数据分析框架将会非常有用。它可以方便地管理和转换所收集到的信息至结构化形式以便后续统计分析工作[^4]。 --- 相关问题
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值