学习Python的日子 爬虫(1)

爬虫是什么?

网络爬虫(又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

为什么使用python做爬虫?

可以做爬虫的语言有很多,如 PHP、Java、C/C++、Python等等...


1) PHP语言 

虽然是世界上最好的语言,但是他天生不是干这个的,而且对多线程、异步支持不够好,并发处理能力很弱。爬虫是工具性程序,对速度和效率要求比较高。


2)Java 语言

的网络爬虫生态圈也很完善,是Python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。  重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。

 

3)C/C++语言

运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。  能用C/C++做爬虫,只能说是能力的表现,但是不是正确的选择。

 

4)Python 语言

语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。 还有强大的爬虫Scrapy框架,以及成熟高效的 scrapy-redis分布式策略。而且,调用其他接口也非常方便(胶水语言)

 

异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程

HTTPHTTPS的关系

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。

HTTPSHypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。

SSLSecure 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())





猜你喜欢

转载自blog.csdn.net/qq_42240071/article/details/80904010
今日推荐