笔者总觉得第一篇是否应该写个高大上的标题以及作文,思来想去,无奈笔者也只是小菜鸟一枚,还是从初学者必由的入门开始吧。也希望于此可以和各位共同进步。
程序员总是喜欢直接切入正题,笔者也不说闲话,让我们首先一起学习如何展翅,以期在之后的翱翔。若有错误,希望大家多多指出,共同探讨!
首先第一个问题,所谓爬虫,亦即Spider,就是我们要制造出一个像蜘蛛一样,能够感知网上我们所要获取的数据(蜘蛛的猎物)所在何方,并且准确快速的定位到其所在的方位,并绕过各种可能遇到的困难去拿下该数据。先来看一个最简单的爬虫:
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
# 对百度首页发起请求
response = requests.get("https://www.baidu.com")
# 将请求到的信息转化为文本
html = response.text
# 利用解析器进行解析
soup = BeautifulSoup(html, 'html.parser')
# 将百度页面的标题输出
print(soup.title)
就这样,首先认识了 Requests 这个库,用该库请求网页后(request),然后收到服务端所送来的响应源码(response),然后就可以离开互联网开始解析工作,就是从源码上定位数据,我最开始接触了BeautifulSoup(个人用着不太习惯),现在用得最多的是Xpath,偶尔用下CSS选择器。介绍到此入门也就可以了,下面就到了码代码时刻,由于笔者码代码能力亟待提高,索性直接手动码上:
# -*- coding: utf-8 -*-
"""首先要表明该文件的编码形式"""
import requests # 导入requests库
from requests.exceptions import ReadTimeout
from lxml import etree
# 请求尝试得到网页源码
def get_page_source(url):
# 捕捉超时异常
try:
response = requests.get(url, timeout=0.5) # 设置超时时间
except ReadTimeout:
print("请求超时")
return None
else:
# 加入判断若得到状态码为200,则表示请求成功并返回网页源码
if response.status_code == 200:
return response.text
return None
# 解析得到源码并尝试得到所需信息,此处使用xpath解析工具
def parse_page_source(html):
selector = etree.HTML(html)
content = ''.join(selector.xpath("//title/text()"))
print(content)
# 定义主方法
def main():
url = "https://www.baidu.com"
html = get_page_source(url)
parse_page_source(html)
# 运行主方法得到百度标题
if __name__ == "__main__":
main()
运行以上代码后,打印出的结果应该是:"百度一下"这几个字。
ps:以上代码中有几个小知识点,各位可自行百度或者等待笔者后期梳理更新。若有错误,恳请指正。