利用Python爬去囧网福利(多线程、urllib、request)
2021-07-08 08:05
标签:二进制 get mys lte head 请求 写入 self socket 一、爬虫流程: 1、发起请求 使用http库向目标站点发起请求,即发送一个Request Request包含:请求头、请求体等 Request模块缺陷:不能执行JS 和CSS 代码 2、获取响应内容 如果服务器能正常响应,则会得到一个Response Response包含:html,json,图片,视频等 3、解析内容 解析html数据:正则表达式(RE模块),第三方解析库如Beautifulsoup,pyquery等 解析json数据:json模块 解析二进制数据:以wb的方式写入文件 4、保存数据 数据库(MySQL,Mongdb、Redis) 文件 1、响应状态码 200:代表成功 301:代表跳转 404:文件不存在 403:无权限访问 502:服务器错误 Request:用户将自己的信息通过浏览器(socket client)发送给服务器(socket server) Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等) ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。 四、结果(福利) 利用Python爬去囧网福利(多线程、urllib、request) 标签:二进制 get mys lte head 请求 写入 self socket 原文地址:https://www.cnblogs.com/ZaraNet/p/9583619.htmlimport os;
import urllib.request;
import re;
import threading;# 多线程
from urllib.error import URLError#接收异常‘s 模块
#获取网站的源码
class QsSpider:
#init 初始化构造函数 .self本身
def __init__(self):
self.user_agent=‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36‘
self.header = {‘User-Agent‘:self.user_agent}
self.url = ‘http://www.qiubaichengren.net/%s.html‘
self.save_dir = ‘./img‘
self.page_num = 20 #page num
#获取网站源代码
def load_html(self,page):
try:
web_path = self.url % page
request = urllib.request.Request(web_path,headers=self.header)
with urllib.request.urlopen(request) as f:
html_content = f.read().decode(‘gbk‘)
#print(html_content)
self.pick_pic(html_content)
except URLError as e :
print(e.reason) #异常原因
#download
def sava_pic(self,img):
save_path = self.save_dir + "/" +img.replace(‘:‘,‘@‘).replace(‘/‘,‘_‘)
if not os.path.exists(self.save_dir):
os.makedirs(self.save_dir)
print(save_path)
urllib.request.urlretrieve(img,save_path)
#filter
def pick_pic(self,html_content):
patren = re.compile(r‘src="http://www.soscw.com/(http:.*?\.(?:jpg|png|gif))‘)
pic_path_list = patren.findall(html_content)
for i in pic_path_list:
#print(i)
self.sava_pic(str(i))
#mamy threading
def start(self):
for i in range(1,self.page_num):
thread = threading.Thread(target=self.load_html,args=str(i))
thread.start()
# main void
spider = QsSpider()
spider.start()
二、响应Response
三、http协议 请求与响应
上一篇:JavaScript字符串
下一篇:一款c语言实现的赛车游戏
文章标题:利用Python爬去囧网福利(多线程、urllib、request)
文章链接:http://soscw.com/essay/102313.html