Python学习日记:从一个爬虫开始

从现在开始,开始将我入门到进阶Python的全过程进行总结。

我不打算从概念开始总结了,我们以实践促进学习,挨个从开发过程中提出问题解决问题。

1、怎样用Python写一个爬虫

这是一个例子:


import requests
from bs4 import BeautifulSoup
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

url = 'http://www.ci123.com/category.php/84/114'

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')

# 进行后续的解析操作
# print(soup)
a_tags = soup.find_all('a', href=True)
# a_tags = soup.select('a[href$=".html"]')
# print(a_tags)
# print(len(a_tags))

with open('output_article.html', 'w', encoding='utf-8') as f:
    for link in a_tags:
        # print(link)
        # if 'title' in link.attrs and len(link['title']) > 5:
        if len(link.text) > 10:
            link_href = link['href']
            # link_title = link['title']
            link_text = link.text
            f.write(f'

{link_text}

\n') f.write('\n')

2、代码说明

1)这是一个爬取国内某育儿网站其中某个页面的爬虫;

2)其核心就是通过requests库去请求该网站的资源;

3)另外为了防止该网站拒绝我们的访问(403),我们可以伪造请求头headers,让它以为我们是通过浏览器去访问的;

4)请求得到相应(response)之后,我们通过BeautifulSoup库解析请求到的资源;

5)并不是所有资源都有用,我们要对返回的结果进行筛选处理,这里只返回text大于10的文章内容;

6)最后通过open和write将内容生成html文件。

3、语法说明 

例子我们已经看到了,现在我们从里面的语句出发,去理解Python的基本语法。

1)import语句

Python的一大亮点就是有很多标准库和第三方库,我们开发Python程序的时候大多需要引入这些库,从这些库出发完成我们的代码开发:

# 导入必要的库
import requests  # 用于发送HTTP请求
from bs4 import BeautifulSoup  # 用于解析HTML内容
import time  # 用于暂停程序执行

2)定义变量

我们看到Python定义变量不需要通过关键字(比如int,float,string等),而是直接给出变量或常量的名字,直接赋值:

# 设置headers以模拟浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 要爬取的网页URL
url = 'http://www.ci123.com/category.php/84/114'

3)调用方法

我们看到Python调用方法跟其他的语言类似,通过库对外暴露的实例对象调用方法或者通过类取定义实例对象,然后通过实例的“点语法”去调用类对外暴露的方法:

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')

# 进行后续的解析操作
a_tags = soup.find_all('a', href=True)

4)for语句

我们观察代码的for语句,发现和其他编程语言类似,也存在“for...in”的编写方式:

for link in a_tags:
        # print(link)
        # if 'title' in link.attrs and len(link['title']) > 5:
        if len(link.text) > 10:
            link_href = link['href']
            # link_title = link['title']
            link_text = link.text
            f.write(f'

{link_text}

\n') f.write('\n')

5)代码格式

观察代码我们发现,和其他编程语言不同的是,Python代码不需要“{}”这样的花括号去包裹一个代码块,而是通过行缩进的方式(一个tab缩进,即4个空格长度),比如上面的for语句,其里面的语句必须是tab缩进之后才不会出现语法错误,而且我们发现,语句末尾用冒号“:”结束,类似于对外大声宣布:“我的语句接下来要从这里开始了,你要换行,而且不能以我对齐(缩进一个tab制表符),坐小孩那桌!”。

这种方式有好有坏,好处是简洁,但是不好的地方也显而易见,比如代码量大的情况,没有花括号明确划分代码块,阅读和代码定位的难度相比其他语言较高。

另外,我们发现Python的语句不需要“;”分号结束,这也有利有弊,尤其是引用其他库或者代码时,是否容易出错有待商榷。

你可能感兴趣的:(学习,python,爬虫)