Spider爬虫基础
get获取某个网站的html代码,post访问网站获取网站返回的信息
import urllib.request import urllib.parse #使用get请求 def start1(): response=urllib.request.urlopen('http://www.baidu.com') print(response.read().decode('utf-8')) #使用post请求 def start2(): data=bytes(urllib.parse.urlencode({'dsadasdas':'杀马特'}),encoding='utf8') #使用uillib.parse来将想发送的表单的键值对按照utf8弄成适合网页post传输的形式 response=urllib.request.urlopen('http://httpbin.org/post',data=data) print(response.read().decode('utf-8')) start2()
设置访问超时处理
import urllib.request import urllib.parse try: response=urllib.request.urlopen('http://www.baidu.com',timeout=0.01) print(response.read().decode('utf-8')) except urllib.error.URLError as e: print('time out')
获取状态码等
import urllib.request import urllib.parse response=urllib.request.urlopen('http://www.baidu.com') print(response.getheader) #获取请求的信息头 print(response.status) #获取请求的状态码 response=urllib.request.urlopen('http://douban.com') print(response.status) #出现418状态码表示自己被发现是爬虫了
通过发送头部来伪装浏览器,突破豆瓣
import urllib.request import urllib.parse url1='http://www.douban.com' sendheader= { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.67" } req=urllib.request.Request(url=url1,headers=sendheader) response=urllib.request.urlopen(req) print(response.read().decode('utf-8'))
beatifulsoup4的使用
bs4可以将复杂的html文档转换成一个复杂的树形结构,每个节点都是python对象,所有的对象可以归纳成4种
-Tag
-NavigableString
-Comment
文档的便利,文档的搜索,css选择器
import urllib.request import urllib.parse import re from bs4 import BeautifulSoup file = open('baidu.html','rb') html=file.read().decode('utf8') bs=BeautifulSoup(html,'html.parser') #1.tag 标签及其内容 print(bs.title) #打印title标签 print(bs.title.string) #打印title里面的字符串内容 print(bs.a.attrs) #拿到标签里面的属性放进字典 #comment 是注释,输出的内容不包括注释符号 #----------文档的便利——--------- print('contents用于遍历某个标签里面的节点放进一个列表',bs.head.contents) print('可以获取列表里面的某一个值',bs.head.contents[0]) #----------文档的搜索——--------- t_list=bs.find_all('a') #下面这种是字符串过滤,会找完全匹配的内容 print('找所有的a标签放进列表',t_list) #下面这种是正则表达式过滤 t_list1=bs.find_all(re.compile('a')) print('正则找含有a的标签',t_list1) #还有根据函数(来返回)过滤 def name_exist(tag): return tag.has_attr('name') t_list=bs.find_all(name_exist) print('找出属性中有name的',t_list) t_list=bs.find_all(id='head') print('找id等于head的',t_list) t_list=bs.find_all(text='百度首页') print('找文本等于百度首页的',t_list) #----------css选择器——--------- t_list=bs.select('title') #按照标签查找 print(t_list) t_list=bs.select('.bdsug') #按照css类查找 print(t_list) t_list=bs.select('#u1') #按照css的id查找 print(t_list) t_list=bs.select('head > title') #按照head下面的title查找 print(t_list) t_list=bs.select('.sda ~ .mm') #找和.sda同一级的.mm 兄弟节点 print(t_list) t_list=bs.select('div',class_='item') #找div且class是item的。 print(t_list)
保存数据进入xls数据库
import xlwt workbook=xlwt.Workbook(encoding='utf8',style_compression=0) #创建表对象 worksheet=workbook.add_sheet('sheet1',cell_overwrite_ok=True) #创建工作表,cell_overwrite_ok=True要写,用于后面写的覆盖前面的 worksheet.write(0,0,'hello') #写入数据,第一参数是行,第二个参数是列,第三个参数是内容 col=('链接','图片','关键字') for i in range(0,3): worksheet.write(1,i,col[i]) workbook.save('student.xls')
sqlite数据库的使用
import sqlite3 conn = sqlite3.connect('test.db') c = conn.cursor() sql=''' create table company (id int primary key not null, name text not null, age int not null, address char(50), salary real) ''' #create table company是创建company的表格 # 下面用括号代表它这个表格里面的内容,首先是id,id是整型且是主键,not nuall是非空 # address char(50)地址是50的字符串 salary是real形的数据 sql1=''' insert into company (id,name,age,address,salary) values(1,'十大',30,'sjsad',15000) ''' c.execute(sql) #执行sql语句,建表 c.execute(sql1) #执行sql语句,插入 sql3='select id,name,address,salary from company' #-------以下为查询操作------ cursor=c.execute(sql3) for row in cursor: print('id',row[0]) print('name',row[1]) print('address',row[2]) print('salary',row[3]) print('\n') # -------以上为查询操作------ conn.commit() #提交数据库操作 conn.close() #关闭数据库连接 print('成功建表') #数据类型 文本text 整形int 字符串型varchar 含小数型numeric #autoincrement自增长)

浙公网安备 33010602011771号