爬虫入门实践——简易搜狐新闻爬虫01"/>
Python与爬虫入门实践——简易搜狐新闻爬虫01
Python与爬虫入门实践——简易搜狐新闻爬虫01
写在前面:
笔者在寒假期间进行了一些简短的实训,主要内容包括简单的爬虫和简单的人脸识别算法,由于时间有限,对于python也是第一次详细学习,功能较为简单,提供给入学者参考,帮助大家进入py的世界,若有不正确或不明确的地方欢迎指正。
以下是一个简单爬虫项目所需要的基本内容,整体的项目代码参考另一片文章:
Python与爬虫入门实践——简易搜狐新闻爬虫02
一、爬虫介绍
爬虫的基本原理
爬虫是什么?
从互联网中抓取数据的程序
搜索引擎
先准备一些网站---找到更多网站---搜集每个页面的数据---保存到服务器中(数据库)
爬虫本质是模拟浏览器访问网页的过程
HTTP/HTTPS
从网站服务器上获取页面,网页传输的是源代码/文件
网页中的三个元素
HTML超文本标记语言
节点上的数据
标签的属性
img、href标签
文本
特殊属性
Id、class
css
控制样式
JavaScript
事件驱动
ajax网页异步技术,网站的接口化又称前后端分离(页面相关的东西单独处理,数据由单独的接口提供Web API 数据格式:JSON格式/XML格式)
爬虫编写
获取源代码
网页中提取数据
HTTP状态码
状态码有助于我们判断编写的程序是否可以正常连接上指定网站
参考资料:
二、爬虫编写
1.访问目标网站
urllib库提供了访问HTTP协议的工具
#urllib库提供了访问HTTP协议的工具
import urllib.request
from urllib import request#获取一个站点的html源码
response=request.urlopen("/")
print(response.geturl())
print(response.info())
print(response.getcode())#得到状态码
结果如下:
2.伪装请求头
有时候请求头会被网站识别,他会拒绝我们访问,这是网站的反爬机制,我们只要伪装一下,装作我们是普通用户就可以通过检测了
from urllib import request
from urllib.request import Request
#beautifulsoup
url=''
#伪装请求头
headers={'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}req=Request(url, headers=headers)response=request.urlopen(req)
print(response.read().decode('utf-8'))
3.安装beautifulsoup
beautifulsoup可以帮助我们提取网页中html标签,来进一步提取我们想要的元素
pip install beautifulsoup4
安装完成后可以看到新的包出现
4.爬取新闻标题和内容
查询标题
from urllib import request
from urllib.request import Request
from bs4 import BeautifulSoup
url='=0?code=61f919a88328210f408c3e188c241d16'headers={'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}req=Request(url, headers=headers)response=request.urlopen(req)soup = BeautifulSoup(response.read(),'html.parser')
print(soup.h1)#元素选择器
#信息的获取
print(soup.h1.name)#标签名
print(soup.title.string)#标签内的字符串
h1=soup.h1
#去掉空格、换行
print(h1.contents[0])#
newstitle = h1.contents[0]
newstitle=newstitle.replace(' ','')
newstitle=newstitle.replace('\n','')
print(newstitle)
查询内容
article=soup.article
ps=article.contents
#遍历子节点,筛选文字信息
for p in ps:if p.string:print(p.string)
这是对于一个新闻内容页的爬取:=0?code=61f919a88328210f408c3e188c241d16
5.爬取信息保存数据库
这里用到的是sqlite数据库
保存收集的数据
1.保存到文件中
文本csv json 保存方便,查询不便
2.保存到服务器
可以保存海量数据
3.保存到数据库中
查询方便,速度快
sqlite数据库
基于文件
创建emp
emp
id 自增主键
name 文本
sex 文本
#创建数据库
import sqlite3
#数据库的连接,参数:数据库文件的名字,如果文件不存在,自动创建文件
conn=sqlite3.connect('mydb.db')
#创建数据表 执行一段sql
#创建执行对象
cor=conn.cursor()
#调用执行对象
cor.execute('''create table emp(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,sex TEXT NOT NULL)
''')
#提交
connmit()
#关闭数据库连接
conn.close()
有绿色箭头的DB按钮是同步刷新,有时出现数据库结果和实际结果不一致的时候可以刷新一下试试
有关数据库的详细代码如下:
#创建数据库
import sqlite3
#数据库的连接,参数:数据库文件的名字,如果文件不存在,自动创建文件
def creat_table():conn=sqlite3.connect('mydb.db')#创建数据表 执行一段sql#创建执行对象cor=conn.cursor()#调用执行对象cor.execute('''create table emp(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,sex TEXT NOT NULL)''')#提交connmit()#关闭数据库连接conn.close()
#增删改查
def add():conn = sqlite3.connect('mydb.db')cor = conn.cursor()cor.execute('''insert into emp (name, sex)values ('赵四','男')''')connmit()conn.close()
# if __name__=='__main__':
# add()
def query():conn = sqlite3.connect('mydb.db')cor = conn.cursor()result=cor.execute('''select * from emp''')ls=[]for row in result:# print(row[0])# print(row[1])# print(row[2])ls.append(row)#print(result)connmit()return lsconn.close()
if __name__=='__main__':ls = query()for row in ls:print(row)
#删除语句delete from emp where id=1
#修改语句update emp set name='xiaoma',sex='女'
更多推荐
Python与爬虫入门实践——简易搜狐新闻爬虫01
发布评论