Python网络爬虫(requests, 代理,Web认证, SSL证书认证)
'''01_普通代理示例.py'''
import requests
url = "http://www.baidu.com/"
proxies = {"http":"http://183.129.207.82:11597"}
headers = {"User-Agent":"Mozilla/5.0"}
res = requests.get(url,proxies=proxies,headers=headers)
print(res.status_code)
'''02_私密代理示例.py'''
import requests
url = "http://httpbin.org/get"
headers = {"User-Agent":"Mozilla/5.0"}
proxies = {"http":"http://309435365:szayclhp@123.206.119.108:16817"}
res = requests.get(url,proxies=proxies,headers=headers)
res.encoding = "utf-8"
print(res.text)
'''05_链家数据ToMongo.py'''
import requests
import re
import pymysql
import warnings
class LianjiaSpider:
def __init__(self):
self.baseurl = "https://bj.lianjia.com/ershoufang/pg"
self.page = 1
self.headers = {"User-Agent": "Mozilla/5.0"}
self.proxies = {"http": "http://127.0.0.1:8888"}
self.db = pymysql.connect("localhost",
"root","ParisPython",charset="utf8")
self.cursor = self.db.cursor()
def getPage(self,url):
res = requests.get(url,proxies=self.proxies,headers=self.headers,timeout=5)
res.encoding = "utf-8"
html = res.text
print("页面爬取成功,正在解析...")
self.parsePage(html)
def parsePage(self,html):
p = re.compile('<div class="houseInfo".*?data-el="region">(.*?)</a>.*?<div class="totalPrice">.*?<span>(.*?)</span>(.*?)</div>',re.S)
r_list = p.findall(html)
# [("天通苑","480","万"),()..]
print("页面解析完成,正在存入数据库...")
self.writeTomysql(r_list)
def writeTomysql(self,r_list):
c_db = "create database if not exists Lianjiadb \
character set utf8"
u_db = "use Lianjiadb"
c_tab = "create table if not exists housePrice( \
id int primary key auto_increment,\
housename varchar(50), \
totalprice int)charset=utf8"
warnings.filterwarnings("ignore")
try:
self.cursor.execute(c_db)
self.cursor.execute(u_db)
self.cursor.execute(c_tab)
except Warning:
pass
ins = "insert into housePrice(housename,totalprice) \
values(%s,%s)"
for r_tuple in r_list:
name = r_tuple[0].strip()
price = float(r_tuple[1].strip())*10000
L = [name,price]
self.cursor.execute(ins,L)
self.db.commit()
print("存入数据库成功")
def workOn(self):
while True:
c = input("爬取按y(q退出):")
if c.strip().lower() == "y":
url = self.baseurl + str(self.page) + "/"
self.getPage(url)
self.page += 1
else:
self.cursor.close()
self.db.close()
print("爬取结束,谢谢使用!")
break
if __name__ == "__main__":
spider = LianjiaSpider()
spider.workOn()
'''09_Web客户端验证.py'''
import requests
import re
class NoteSpider:
def __init__(self):
self.headers = {"User-Agent":"Mozilla/5.0"}
self.url = "网址"
self.proxies = {"http":"http://309435365:szayclhp@123.206.119.108:16817"}
# auth参数存储用户名和密码(必须为元组)
self.auth = ("账号","密码")
def getParsePage(self):
res = requests.get(self.url,
proxies=self.proxies,
headers=self.headers,
auth=self.auth,
timeout=3)
res.encoding = "utf-8"
html = res.text
print(html)
p = re.compile('<a href=".*?>(.*?)</a>',re.S)
r_list = p.findall(html)
print(r_list)
self.writePage(r_list)
def writePage(self,r_list):
print("开始写入文件...")
with open("达内科技.txt","a") as f:
for r_str in r_list:
f.write(r_str + "\n\n")
print("写入成功")
if __name__ == "__main__":
spider = NoteSpider()
spider.getParsePage()
'''10_SSL证书认证示例.py'''
import requests
url = "https://www.12306.cn/mormhweb/"
headers = {"User-Agent":"Mozilla/5.0"}
res = requests.get(url,headers=headers,verify=False)
res.encoding = "utf-8"
print(res.text)
# 创建Handler处理器对象
http_handler = urllib.request.HTTPHandler()
#proxy_handler = urllib.request.ProxyHandler()
# 创建自定义的opener对象
opener = urllib.request.build_opener(http_handler)
# 利用opener对象的open()方法发请求
req = urllib.request.Request(url)
res = opener.open(req)
print(res.read().decode("utf-8"))
# 创建Handler处理器对象
pro_hand = urllib.request.ProxyHandler(proxy)
# 创建自定义opener对象
opener = urllib.request.build_opener(pro_hand)
# opener对象open方法发请求
req = urllib.request.Request(url)
res = opener.open(req)
print(res.read().decode("utf-8"))
'''06_猫眼电影top100抓取.py'''
import requests
import re
import pymongo
class MaoyanSpider:
def __init__(self):
self.baseurl = "http://maoyan.com/board/4?offset="
self.headers = {"User-Agent":"Mozilla/5.0"}
self.page = 1
self.offset = 0
self.proxies = {"http":"http://309435365:szayclhp@123.206.119.108:16817"}
self.conn = pymongo.MongoClient("localhost",27017)
self.db = self.conn.Film
self.myset = self.db.top100
# 下载页面
def loadPage(self,url):
res = requests.get(url,headers=self.headers)
res.encoding = "utf-8"
html = res.text
self.parsePage(html)
# 解析页面
def parsePage(self,html):
p = re.compile('<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?releasetime">(.*?)</p>',re.S)
r_list = p.findall(html)
# print(r_list)
# [("霸王别姬","张国荣","1994-01-01"),(),()...]
self.writeTomysql(r_list)
def writeTomysql(self,r_list):
for r_tuple in r_list:
name = r_tuple[0].strip()
star = r_tuple[1].strip()
releasetime = r_tuple[2].strip()
D = {"name":name,
"star":star,
"releasetime":releasetime}
self.myset.insert(D)
print("存入数据库成功")
def workOn(self):
while True:
c = input("爬取请按y(y/n):")
if c.strip().lower() == "y":
self.offset = (self.page-1)*10
url = self.baseurl + str(self.offset)
self.loadPage(url)
self.page += 1
else:
print("爬取结束,谢谢使用!")
break
if __name__ == "__main__":
spider = MaoyanSpider()
spider.workOn()

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
JavaScript学习(四)
一元运算符:只需要一个操作数。 + 正号:正号不会对我们的数值产生任何影响 - 负号:负号可以对数值进行负号取反 正负号都可以将数值类型转换成number,原理和number()函数一样。 自增和自减: 自增:可以使变量在自身的基础上+1 运算符:++ 自增分为2种,a++和++a 对于原变量来说是没有区别的,都会使原变量的值+1 不同的是a++和++a的值不同:a++的值等于自增前的值,++a的值等于自增后的值 自减:可以使变量在自身的基础上-1 运算符:-- 逻辑运算符: !非 :可以用来对一个值进行非运算----------为任意数值进行两次非运算,可以转化为布尔值 &&与 :可以对符号两边的值进行与运算并返回结果---两个值中只要有一个为false就返回false ||或 :可以对符号两边的值进行或运算并返回结果---两个值中只要有一个为true就返回true 赋值运算符: =等于:可以将右侧数值赋值给左侧的变量 +=:a=a+5可以转变为a += 5 -=:a=a-5等价于a -= 5 *=:a=a*5等价于a *=...
-
下一篇
异常机制详解
目录介绍 1.什么是异常 2.异常 2.1 异常的概述和分类【了解】 2.2 JVM默认是如何处理异常的【理解】 2.3 异常处理的两种方式【理解】 2.4 try...catch的方式处理异常【掌握】 2.5 编译期异常和运行期异常的区别【理解】 2.6 throw的概述以及和throws的区别【掌握】 2.7 异常的注意事项及如何使用异常处理【了解】 2.8 Throwable类中的常用方法 3.Error(错误) 4.Exception(异常) 5.处理异常机制深入理解 5.1 抛出异常 5.2 捕获异常 5.3 异常处理方式不同 6.异常总结 6.1 异常总结 6.2 try-catch-finally规则 6.3 try、catch、finally语句块的执行顺序 6.4 Throws抛出异常的规则 7.自定义异常 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker容器配置,解决镜像无法拉取问题
- MySQL数据库在高并发下的优化方案