• Python--(爬虫与数据库的连接)


    (每一天都是属于你的!)

     

    Python对于初学后巩固基础的人还是更多的来接触python爬虫会更好一些,在Python爬虫中包含很多基础部分知识,并且在项目中会提升你的成功感!加油!

    我在工作之余时间,把Python的爬虫基础内容整理了一下,资料因为太多所以都放在QQ群内了,需要的可以来---607021567。

    今天整理了一个两个网站的小说阅读平台的爬虫,将两个网站的小说可按自有的格式抓取下来自动生成txt文件。

    项目介绍:

      --Python爬虫

        --模块:requests,BeautifulSoup,time

        --分析:request模块作用于网站的连接与处理,BeautifulSoup作用于源码中的代码分析与抓取,time主要是在我们抓取的过程中加入时间限制(这个主要是应对有网站监控的,这里我们就不需要了)

     因为这里没有涉及到数据库相关的操作,所以没有对数据库的相关详细内容,但是我会将Python与mongodb、MySQL、Sqlserver的连接方式的代码会附赠在下面。

     

    一、网页分析:

    首先步步分析网页内容:https://www.booktxt.net/6_6453/2529786.html,cookie信息--F12键。

    这里面有很多广告,不过可以不用去理它们,首先获取到我们需要的网址:

     1 # -*- coding:utf-8 -*-
     2 import requests
     3 from bs4 import BeautifulSoup
     4 import time
     5 
     6 def project(url,page):
     7     #url='http://www.23us.so/files/article/html/1/1809/877404.html' #大主宰
     8     #url='http://www.23us.so/files/article/html/6/6100/2193573.html' #天下无双
     9     #url='https://www.booktxt.net/6_6453/2529786.html' #元尊
    10     headers={"Cookie": "jieqiVisitId=article_articleviews%3D6453; cscpvrich87",
    11         "Host": "www.booktxt.net",
    12              "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
    13              "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
    14     r =requests.get(url,headers,timeout=30)
    15     h = r.content

     这里主要使用request模块获取网址的源码,h--就是我们所获取的源码,你可以测试的时候print出来。

     

    二、源码分析

    我们这里直接在网页中来查看源码:网页中右键查看源码。

    这里我们注意到文本的内容包含在<div id="content">的标签内,所以接下来我们使用bs4来处理。

    1 soup = BeautifulSoup(h, "html.parser")
    2 a1 = soup.find('div',class_="bookname").h1
    3 text_da(a1.get_text().encode('utf-8')+'
    
    
    ')
    4 a = soup.find('div',id='content')
    5 text_da(a.get_text().encode('utf-8')+'
    
    
    ')
    

    每一行分开解释:

    1、使用BeautifulSoup模块,其中"html.parser"是模块内置函数,对源码的分析,这样我们就获取到网址的bs4源码。

    2、首先是获取小说中的标题,soup.find--是获取源码中第一个div标签class=“bookname”下的h1标签,当前我们获取到h1标签所有内容包括标签,但是我们需要获取到文本内容。

    3、获取获得标签内的文本内容--a1.get_text(),这里的encode('utf-8')是将我们获取的内容需要转码,不然是乱码的状态。

    4、获取我们主要的文本内容--同理,需要获得文本内容的标签div

    5、获得文本内容。

    三、分页操作

    因为我们浏览的页面会有分页,所有这里也是我们需要注意的地方。

    这里的下一章按钮,就是我们的突破点:

    1  b = soup.find('div',class_='bottem2')
    2  if b:
    3      a = b.find_all('a')
    4      #shuurl = 'http://www.23us.so'+a[-1]['href']
    5      shuurl = 'https://www.booktxt.net' + a[-2]['href']
    6      #print shuurl
    7      page=page+1
    8      project(shuurl,page)

     我们在源码中获取到的下一章的网址位于a标签内。

    3行、--我们获取所有的a标签。

    5行、a[-2]是获取我们倒数第二个标签也就是我们的下一章标签,【’href‘】--是获得a标签内的href的内容也就是我们的地址,这里需要拼接字符串。

    7行、是抓取的注释内容,稍后在源码中你会看到效果

    8行、有的小伙伴注意到了,这里是调用函数,函数的名字就是我们一开始定义的函数,就是它自己本身。

    四、写入文件

    接下来,我们的主要价值数据获取到,但是我们需要它成为txt文件,所以我写了一个函数,在上面的函数体中直接调用就可以了。

    1 def text_da(text):
    2     fo = open("foo.txt", "a")
    3     fo.write(text)
    4 
    5     # 关闭打开的文件
    6     fo.close()

    五、启动函数

    最后一步,就是我们的启动程序代码。

    1 if __name__ == '__main__':
    2     page=1
    3     url = 'https://www.booktxt.net/6_6453/2529786.html'  # 元尊
    4     project(url,page)

    这里主要是python的内置函数,作为启动py文件内的函数。

     六、源码

    哦!忘了源码-----

     1 # -*- coding:utf-8 -*-
     2 import requests
     3 from bs4 import BeautifulSoup
     4 import time
     5 
     6 def project(url,page):
     7     #url='http://www.23us.so/files/article/html/1/1809/877404.html' #大主宰
     8     #url='http://www.23us.so/files/article/html/6/6100/2193573.html' #天下无双
     9     #url='https://www.booktxt.net/6_6453/2529786.html' #元尊
    10     headers={"Cookie": "jieqiVisitId=article_articleviews%3D6453; cscpvrich8793_fidx=4; __tins__19219364=%7B%22sid%22%3A%201527749231776%2C%20%22vd%22%3A%204%2C%20%22expires%22%3A%201527751067272%7D; __51cke__=; __51laig__=4; Hm_lvt_6949867c34e7741ebac3943050f04833=1527749232; Hm_lpvt_6949867c34e7741ebac3943050f04833=1527749267; cscpvcouplet8792_fidx=4; cscpvrich8791_fidx=4",
    11         "Host": "www.booktxt.net",
    12              "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
    13              "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
    14     r =requests.get(url,headers,timeout=30)
    15     h = r.content
    16     #print h
    17     soup = BeautifulSoup(h, "html.parser")
    18     #a = soup.find('dd',id='contents')
    19     #print a.get_text()
    20     a1 = soup.find('div',class_="bookname").h1
    21     text_da(a1.get_text().encode('utf-8')+'
    
    
    ')
    22     a = soup.find('div',id='content')
    23     text_da(a.get_text().encode('utf-8')+'
    
    
    ')
    24     print ''+str(page)+'章!'
    25     #b = soup.find('dd',id='footlink')
    26     b = soup.find('div',class_='bottem2')
    27     if b:
    28         a = b.find_all('a')
    29         #shuurl = 'http://www.23us.so'+a[-1]['href']
    30         shuurl = 'https://www.booktxt.net' + a[-2]['href']
    31         #print shuurl
    32         page=page+1
    33         project(shuurl,page)
    34 
    35 def text_da(text):
    36     fo = open("foo.txt", "a")
    37     fo.write(text)
    38 
    39     # 关闭打开的文件
    40     fo.close()
    41 
    42 if __name__ == '__main__':
    43     page=1
    44     url = 'https://www.booktxt.net/6_6453/2529786.html'  # 元尊
    45     project(url,page)

    对了!还有Python对于数据库的连接操作,我这里直接就贴源码了,其中很多的内容我都注释了!不懂的可以加群---607021567(需要验证信息,因为我不知道来的是朋友还是敌人)

     1 # -*- coding:utf-8 -*-
     2 import pymongo
     3 from pymongo import MongoClient
     4 import json
     5 #MONGODB
     6 #连接
     7 client = MongoClient('mongodb://localhost')
     8 db = client.test
     9 table='test'
    10 #db[table].insert({'user_id':2,'name':'zhu'})
    11 #db[table].update({'name':'zhu'},{'$set':{'user_id':2}})
    12 #db[table].remove({'name':'zhu'})
    13 #查询结果排序(key:1或者-1)升序或者降序
    14 a = db[table].find().sort("user_id",1)
    15 print a
    16 for i in a:
    17     print i
    18 
    19 #db.authenticate('test','test')
    20 
    21 """table = 'imi_product'
    22 a = db[table].find({'partno':'NEN1FX6'}).limit(1)
    23 detailList = []
    24 for i in a:
    25         if (i.get("specs")):
    26                 specary = i.get("specs")
    27                 for i in specary:
    28                     detailList.append({"left": i, "right": specary[i]})
    29 print detailList
    30 for i in detailList:
    31     print i.get('right')
    32 #查询和增加
    33 #db[table].insert({'sn':1,'b':'b'})
    34 #更改
    35 #db[table].update({'sn':1},{'$set':{'b':'sda'}})
    36 #删除
    37 #删除name=lisi的全部记录
    38 #db[table].remove({'sn': 1})
    39 #删除集合里的所有记录
    40 #db.users.remove()
    41 #    (>)  大于 - $gt
    42 #    (<)  小于 - $lt
    43 #    (>=)  大于等于 - $gte
    44 #    (<= )  小于等于 - $lte
    45 #a = db[table]
    46 #print a.find_one()"""
    47 
    48 
    49 
    50 #SQLSERVER
    51 """import pyodbc
    52 import MySQLdb
    53 MSSQL_INFO = {"hostname":"localhost","username":"","password":"","dbname":"oneice"}
    54 strconn= 'DRIVER={SQL Server};SERVER='+MSSQL_INFO.get("hostname")+';DATABASE='+MSSQL_INFO.get("dbname")+';UID='+MSSQL_INFO.get("username")+';PWD='+MSSQL_INFO.get("password")
    55 db = pyodbc.connect(strconn)
    56 sqldb = db.cursor()
    57 #查询
    58 sql = 'select * from news where news_id=1'
    59 #添加
    60 sql ="insert into news (news_title,news_author,news_summary,news_content,news_pic) values ('haha','happy','Iriji','little','12dsa')"
    61 #删除
    62 sql ="delete from news where news_id=5"
    63 sqldb.execute(sql)
    64 sqldb.commit()
    65 #查询
    66 row = sqldb.fetchone()
    67 print row[1]
    68 #存储过程
    69 sqldb.execute("{call 存储过程名字 (参数)}", '上传的参数')
    70 q = sqldb.fetchone()/fetchall()
    71 sqldb.commit()
    72 if q:
    73     print q[1]"""

    这里包含这Python调用SQLSERVER的存储过程和基本操和MONGODB的基本操作!

  • 相关阅读:
    js中验证身份证号码是否正确支持15位和18位身份证号
    vue-element-admin-i18n 前端框架的使用
    根据年份选择周数-js
    js 计算开始日期和结束日期跨度几个月份的方法
    Java上传图片到服务器
    c# List<Object>和List<实体>相互转化
    GC 相关详细参数
    Groovy脚本和Groovy类反编译文件
    dev 控件中点击TreeList节点高亮显示GridControl中存在的行
    spring容器
  • 原文地址:https://www.cnblogs.com/zhuPython/p/9156472.html
Copyright © 2020-2023  润新知