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

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键。

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

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

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

二、源码分析

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

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

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

每一行分开解释:

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

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

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

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

5、获得文本内容。

三、分页操作

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

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

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

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

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

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

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

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

四、写入文件

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

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

五、启动函数

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

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

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

六、源码

哦!忘了源码-----

 # -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time def project(url,page):
#url='http://www.23us.so/files/article/html/1/1809/877404.html' #大主宰
#url='http://www.23us.so/files/article/html/6/6100/2193573.html' #天下无双
#url='https://www.booktxt.net/6_6453/2529786.html' #元尊
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",
"Host": "www.booktxt.net",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
r =requests.get(url,headers,timeout=30)
h = r.content
#print h
soup = BeautifulSoup(h, "html.parser")
#a = soup.find('dd',id='contents')
#print a.get_text()
a1 = soup.find('div',class_="bookname").h1
text_da(a1.get_text().encode('utf-8')+'\n\n\n')
a = soup.find('div',id='content')
text_da(a.get_text().encode('utf-8')+'\n\n\n')
print '第'+str(page)+'章!'
#b = soup.find('dd',id='footlink')
b = soup.find('div',class_='bottem2')
if b:
a = b.find_all('a')
#shuurl = 'http://www.23us.so'+a[-1]['href']
shuurl = 'https://www.booktxt.net' + a[-2]['href']
#print shuurl
page=page+1
project(shuurl,page) def text_da(text):
fo = open("foo.txt", "a")
fo.write(text) # 关闭打开的文件
fo.close() if __name__ == '__main__':
page=1
url = 'https://www.booktxt.net/6_6453/2529786.html' # 元尊
project(url,page)

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

 # -*- coding:utf-8 -*-
import pymongo
from pymongo import MongoClient
import json
#MONGODB
#连接
client = MongoClient('mongodb://localhost')
db = client.test
table='test'
#db[table].insert({'user_id':2,'name':'zhu'})
#db[table].update({'name':'zhu'},{'$set':{'user_id':2}})
#db[table].remove({'name':'zhu'})
#查询结果排序(key:1或者-1)升序或者降序
a = db[table].find().sort("user_id",1)
print a
for i in a:
print i #db.authenticate('test','test') """table = 'imi_product'
a = db[table].find({'partno':'NEN1FX6'}).limit(1)
detailList = []
for i in a:
if (i.get("specs")):
specary = i.get("specs")
for i in specary:
detailList.append({"left": i, "right": specary[i]})
print detailList
for i in detailList:
print i.get('right')
#查询和增加
#db[table].insert({'sn':1,'b':'b'})
#更改
#db[table].update({'sn':1},{'$set':{'b':'sda'}})
#删除
#删除name=lisi的全部记录
#db[table].remove({'sn': 1})
#删除集合里的所有记录
#db.users.remove()
# (>) 大于 - $gt
# (<) 小于 - $lt
# (>=) 大于等于 - $gte
# (<= ) 小于等于 - $lte
#a = db[table]
#print a.find_one()""" #SQLSERVER
"""import pyodbc
import MySQLdb
MSSQL_INFO = {"hostname":"localhost","username":"","password":"","dbname":"oneice"}
strconn= 'DRIVER={SQL Server};SERVER='+MSSQL_INFO.get("hostname")+';DATABASE='+MSSQL_INFO.get("dbname")+';UID='+MSSQL_INFO.get("username")+';PWD='+MSSQL_INFO.get("password")
db = pyodbc.connect(strconn)
sqldb = db.cursor()
#查询
sql = 'select * from news where news_id=1'
#添加
sql ="insert into news (news_title,news_author,news_summary,news_content,news_pic) values ('haha','happy','Iriji','little','12dsa')"
#删除
sql ="delete from news where news_id=5"
sqldb.execute(sql)
sqldb.commit()
#查询
row = sqldb.fetchone()
print row[1]
#存储过程
sqldb.execute("{call 存储过程名字 (参数)}", '上传的参数')
q = sqldb.fetchone()/fetchall()
sqldb.commit()
if q:
print q[1]"""

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

Python--(爬虫与数据库的连接)的更多相关文章

  1. Python与Mysql 数据库的连接,以及查询。

    python与mysql数据库的连接: pymysql是python中对数据库的连接模块:因此应当首先安装pymysql数据库模块. 执行pip install pymysql 命令. 然后在pyth ...

  2. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  3. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  4. python爬虫30 | scrapy后续,把「糗事百科」的段子爬下来然后存到数据库中

    上回我们说到 python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害! WOW!! scrapy awesome!! 怎么会有这么牛逼的框架 wow!! awesome!! 用 ...

  5. python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库。

    小帅b说过 在这几篇中会着重说说将爬取下来的数据进行存储 上次我们说了一种 csv 的存储方式 这次主要来说说怎么将爬取下来的数据保存到 MySQL 数据库 接下来就是 学习python的正确姿势 真 ...

  6. 小白学 Python 爬虫(5):前置准备(四)数据库基础

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  8. python爬虫:爬取易迅网价格信息,并写入Mysql数据库

    本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html   2.爬取中文网站以及各种乱码处 ...

  9. Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库

    公司研发不给力,我就自己写了一个,专门爬关键词对应的商品ID. 其中还学会了用Python操作DB2数据库.Python发送邮件.写日志文件.处理浏览器访问限制. #!/usr/bin/python# ...

随机推荐

  1. java思维导图

    https://www.edrawsoft.cn/viewer/public/s/eeca7704686971

  2. python第十六天

    一.包 1.什么是包? 一系列模块的集合 2.有什么用? 包通过文件夹来管理一系列功能相近的模块 3.包重点? 包中一定有一个专门用来管理包中所有模块的文件   __init__ 4.什么是包名? 包 ...

  3. python函数默认参数陷阱

    对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而 ...

  4. python基础知识练习题(一)

    1.执行Python脚本的两种方式:WIN+R,cmd,命令行窗口输入:python  进入python模式输入命令行直接执行命令:编写以.py结尾的文件,写入命令行,然后运行python.exe打开 ...

  5. linux 使用技巧 screen 管理你的远程桌面的会话创建和使用

    下面介绍  screen 使用的技巧教你管理远程会话 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份. ftp 传 ...

  6. Little Sub and Isomorphism Sequences ZOJ - 4089

    ZOJ - 4089 思路:可以反正 最长重构序列必然符合  此模式 x  +  {   }  与  {   }  +  x 那么 题意转化为了  找两个距离最长的相同的数.eeee 先离散化 然后 ...

  7. Git 如何解决部署远程仓库出现 fatal: refusing to merge unrelated histories 问题

    想把本地仓库的文件搬到Github,先将远程仓库和本地仓库关联起来: 先到Github上复制远程仓库的SSH地址: 运行 git remote add origin 你复制的地址 理论上—如果在创建 ...

  8. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  9. python学习:利用循环语句完善输入设置

    利用循环语句完善输入设置 使用for循环: 代码1:_user = "alex"_password = "abc123" for i in range(3): ...

  10. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...