get获取某个网站的html代码,post访问网站获取网站返回的信息

  1. import urllib.request
  2. import urllib.parse
  3. #使用get请求
  4. def start1():
  5. response=urllib.request.urlopen('http://www.baidu.com')
  6. print(response.read().decode('utf-8'))
  7. #使用post请求
  8. def start2():
  9. data=bytes(urllib.parse.urlencode({'dsadasdas':'杀马特'}),encoding='utf8')
  10. #使用uillib.parse来将想发送的表单的键值对按照utf8弄成适合网页post传输的形式
  11. response=urllib.request.urlopen('http://httpbin.org/post',data=data)
  12. print(response.read().decode('utf-8'))
  13. start2()

设置访问超时处理

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. try:
  5. response=urllib.request.urlopen('http://www.baidu.com',timeout=0.01)
  6. print(response.read().decode('utf-8'))
  7. except urllib.error.URLError as e:
  8. print('time out')

获取状态码等

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. response=urllib.request.urlopen('http://www.baidu.com')
  5. print(response.getheader) #获取请求的信息头
  6. print(response.status) #获取请求的状态码
  7. response=urllib.request.urlopen('http://douban.com')
  8. print(response.status) #出现418状态码表示自己被发现是爬虫了

通过发送头部来伪装浏览器,突破豆瓣

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. url1='http://www.douban.com'
  5. sendheader= {
  6. "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"
  7. }
  8. req=urllib.request.Request(url=url1,headers=sendheader)
  9. response=urllib.request.urlopen(req)
  10. print(response.read().decode('utf-8'))

beatifulsoup4的使用

bs4可以将复杂的html文档转换成一个复杂的树形结构,每个节点都是python对象,所有的对象可以归纳成4种

-Tag

-NavigableString

-Comment

文档的便利,文档的搜索,css选择器

  1. import urllib.request
  2. import urllib.parse
  3. import re
  4. from bs4 import BeautifulSoup
  5.  
  6. file = open('baidu.html','rb')
  7. html=file.read().decode('utf8')
  8. bs=BeautifulSoup(html,'html.parser')
  9. #1.tag 标签及其内容
  10. print(bs.title) #打印title标签
  11. print(bs.title.string) #打印title里面的字符串内容
  12. print(bs.a.attrs) #拿到标签里面的属性放进字典
  13.  
  14. #comment 是注释,输出的内容不包括注释符号
  15. #----------文档的便利——---------
  16. print('contents用于遍历某个标签里面的节点放进一个列表',bs.head.contents)
  17. print('可以获取列表里面的某一个值',bs.head.contents[0])
  18. #----------文档的搜索——---------
  19. t_list=bs.find_all('a')
  20. #下面这种是字符串过滤,会找完全匹配的内容
  21. print('找所有的a标签放进列表',t_list)
  22. #下面这种是正则表达式过滤
  23. t_list1=bs.find_all(re.compile('a'))
  24. print('正则找含有a的标签',t_list1)
  25. #还有根据函数(来返回)过滤
  26. def name_exist(tag):
  27. return tag.has_attr('name')
  28. t_list=bs.find_all(name_exist)
  29. print('找出属性中有name的',t_list)
  30.  
  31. t_list=bs.find_all(id='head')
  32. print('找id等于head的',t_list)
  33.  
  34. t_list=bs.find_all(text='百度首页')
  35. print('找文本等于百度首页的',t_list)
  36. #----------css选择器——---------
  37. t_list=bs.select('title') #按照标签查找
  38. print(t_list)
  39. t_list=bs.select('.bdsug') #按照css类查找
  40. print(t_list)
  41. t_list=bs.select('#u1') #按照css的id查找
  42. print(t_list)
  43. t_list=bs.select('head > title') #按照head下面的title查找
  44. print(t_list)
  45. t_list=bs.select('.sda ~ .mm') #找和.sda同一级的.mm 兄弟节点
  46. print(t_list)
  47. t_list=bs.select('div',class_='item') #找div且class是item的。
  48. print(t_list)

保存数据进入xls数据库

  1. import xlwt
  2. workbook=xlwt.Workbook(encoding='utf8',style_compression=0) #创建表对象
  3. worksheet=workbook.add_sheet('sheet1',cell_overwrite_ok=True) #创建工作表,cell_overwrite_ok=True要写,用于后面写的覆盖前面的
  4. worksheet.write(0,0,'hello') #写入数据,第一参数是行,第二个参数是列,第三个参数是内容
  5. col=('链接','图片','关键字')
  6. for i in range(0,3):
  7. worksheet.write(1,i,col[i])
  8. workbook.save('student.xls')

sqlite数据库的使用

  1. import sqlite3
  2. conn = sqlite3.connect('test.db')
  3. c = conn.cursor()
  4. sql='''
  5. create table company
  6. (id int primary key not null,
  7. name text not null,
  8. age int not null,
  9. address char(50),
  10. salary real)
  11. '''
  12. #create table company是创建company的表格
  13. # 下面用括号代表它这个表格里面的内容,首先是id,id是整型且是主键,not nuall是非空
  14. # address char(50)地址是50的字符串 salary是real形的数据
  15.  
  16. sql1='''
  17. insert into company (id,name,age,address,salary)
  18. values(1,'十大',30,'sjsad',15000)
  19.  
  20. '''
  21.  
  22. c.execute(sql) #执行sql语句,建表
  23. c.execute(sql1) #执行sql语句,插入
  24. sql3='select id,name,address,salary from company'
  25. #-------以下为查询操作------
  26. cursor=c.execute(sql3)
  27. for row in cursor:
  28. print('id',row[0])
  29. print('name',row[1])
  30. print('address',row[2])
  31. print('salary',row[3])
  32. print('\n')
  33. # -------以上为查询操作------
  34. conn.commit() #提交数据库操作
  35. conn.close() #关闭数据库连接
  36. print('成功建表')
  37. #数据类型 文本text 整形int 字符串型varchar 含小数型numeric
  38. #autoincrement自增长)

Spider爬虫基础的更多相关文章

  1. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  2. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  3. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  4. spider 爬虫文件基本参数(3)

    一 代码 # -*- coding: utf-8 -*- import scrapy class ZhihuSpider(scrapy.Spider): # 爬虫名字,名字唯一,允许自定义 name ...

  5. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  6. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  7. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  8. python爬虫基础_scrapy

    其实scrapy想要玩得好,还是需要大量全栈知识的.scrapy 被比喻为爬虫里的django,框架和django类似. 安装: Linux/mac - pip3 install scrapy Win ...

  9. 爬虫基础以及 re,BeatifulSoup,requests模块使用

    爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...

随机推荐

  1. C++libcurl的使用

    一.libcurl描述: 在curl的官方网站 **http://curl.haxx.se/download.html** 提供编译好libcurl包,  最后写一个demod工程,演示下libcur ...

  2. Mysql 52条SQL语句性能优化策略汇总

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...

  3. MySQL:判断逗号分隔的字符串中是否包含某个字符串 && 如何在一个以逗号分隔的列表中的一个字段中连接MySQL中的多对多关系中的数据

    需求:      sql语句中,判断以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素, 例如:判断 'a,b,c,d,e,f,g' 中是否包含 'a',sql语句如何 ...

  4. 简单测试linq to sql性能

         前些日子,做了一个物业收费系统,cs模式,用到了linq to sql 技术,这是我第一次使用这个东东写程序存取数据库,迷迷糊糊搞得一塌糊涂,当时有个同学他们找好的分页组件,然后写好了调用方 ...

  5. GraduateDesign-给APP添加获取位置信息和天气预报的功能(json)

    首先,我的app需要通过网络来获取当前所在的位置.这里我找到了一个json来获取本地位置信息. http://int.dpool.sina.com.cn/iplookup/iplookup.php?f ...

  6. 关于客户和供应商预制凭证添加WBS字段

    客户和供应商的预制凭证的对应标准屏幕SAPLF0400301和SAPLF0400302并没有提供WBS字段,有的需求需要增强WBS字段到屏幕上,本文会介绍增强WBS字段的步骤,也请读者多多指教.为了不 ...

  7. SSM框架实现多张图片和其他数据一起上传

    一.SSM+Form 多张图片和其他数据一起上传, 1.导包: commons-fileupload-1.3.3.jar commons-io-2.4.jar 2.springmvc.xml 文件配置 ...

  8. Turtlebot3新手教程:OpenCR软件设置(shell)

    *本文针对如何利用脚本来更新固件进行讲解 具体步骤如下: burger的固件更新 $ export OPENCR_PORT=/dev/ttyACM0 $ export OPENCR_MODEL=bur ...

  9. 图解SparkStreaming与Kafka的整合,这些细节大家要注意!

    前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ...

  10. try catch finally语句块中存在return语句时的执行情况剖析

    2种场景 (1) try中有return,finally中没有return(注意会改变返回值的情形);(2) try中有return,finally中有return; 场景代码分析(idea亲测) 场 ...