爬虫是什么?
网络爬虫(又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
为什么使用python做爬虫?
可以做爬虫的语言有很多,如 PHP、Java、C/C++、Python等等...
1) PHP语言
虽然是世界上最好的语言,但是他天生不是干这个的,而且对多线程、异步支持不够好,并发处理能力很弱。爬虫是工具性程序,对速度和效率要求比较高。
2)Java 语言
的网络爬虫生态圈也很完善,是Python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。 重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。
3)C/C++语言
运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。 能用C/C++做爬虫,只能说是能力的表现,但是不是正确的选择。
4)Python 语言
语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。 还有强大的爬虫Scrapy框架,以及成熟高效的 scrapy-redis分布式策略。而且,调用其他接口也非常方便(胶水语言)
异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程
HTTP和HTTPS的关系
HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。
SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。
HTTP的端口号为80,
HTTPS的端口号为443
User-Agent是什么?在爬虫中的作业?
User-Agent:是客户浏览器的名称,代表浏览器身份,有些时候同样的网站使用不同浏览器访问返回的数据会不一样。
什么是Cookie?
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
Cookie:通过在 客户端(一般是浏览器) 记录的信息确定用户的身份。
Session:通过在 服务器端 记录的信息确定用户的身份。
批量爬取百度贴吧页面数据案例
from urllib import parse
from urllib.request import Request, urlopen
def writ_file(html, filename):
print("正在保存:", filename)
with open(filename, "wb") as f:
f.write(html)
print("下载成功:", filename)
def load_page(full_url, filename):
print("正在下载:%s" % filename)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36'
}
request = Request(full_url, headers=headers)
response = urlopen(request)
return response.read()
def tieba_spide(url, start_page, end_page):
for page in range(start_page, end_page + 1):
pn = (page - 1) * 50
full_url = url + "&pn=" + str(pn)
filrname = "第" + str(page) + "页.html"
print("full_url=", full_url)
respose_data = load_page(full_url, filrname)
print(respose_data)
writ_file(respose_data, filrname)
def main():
kw = input("请输入贴吧名:")
start_page = int(input("请输入起始页:"))
end_page = int(input("请输入结束页:"))
kw = {"kw": kw}
kw = parse.urlencode(kw)
url = "http://www.baidu.com/?" + kw
tieba_spide(url, start_page, end_page)
if __name__ == "__main__":
main()
代码访问带有CA认证的网站案例
from urllib.request import Request, urlopen
import ssl
context = ssl._create_unverified_context()
url = "https://www.12306.cn/mormhweb/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
request = Request(url, headers=headers)
response = urlopen(request, context=context)
print(response.read().decode())