python学习笔记之爬虫 -1- 初识爬虫

版权声明:所有资料资源均应用作教育用途,请勿用作商业用途 https://blog.csdn.net/qq_38876114/article/details/86622871

爬虫

python爬虫识一个对于网络资源进行批处理的程序,比方说,现在我想要看汽车之家的最新新闻的合集,或者说我自己做了一个程序,想要临时扩充一下目前的资讯库,需要转载其他人的文章,手动的转赞无疑是非常慢的,这里就可以用到爬虫,下面给出一个小例子来说明一下爬虫的基本工作原理

基本需求

https://www.autohome.com.cn/news/ 对于这个网站,我想要他新闻的标题,链接,图片等等信息
新闻截图

操作

针对上述的问题,我应该怎样操作呢,首先,应该需要获取当前这个网页,然后分析这个网页,提取网页中的信息,查看网页的源码可以看到如下的界面
网页源码我们当然可以通过写一个正则表达式,将这个网页的源码保存为字符串,然后进行正则匹配来得到任意部分的字符串,但是这样肯定不会很简单,并且python强大的工具包早就编写好了相应的工具,这里主要介绍两个包,requests包和beautifulSoup包,安装方法:

pip install requests
pip3 install beautifulsoup4

requests包的功能是发送相应的网络请求,包括常见的get命令等等,可以将某个网页的源代码请求至本地,可以让用户以不同的编码,字符串或者二进制的方式查看
beautifulsoup包主要负责网页源代码的处理,上述得到的源代码是字符串或者流的形式,不适合用高级语言直接处理,python中更好处理的是对象,因此,beautifulsoup模块可以将一个网页源代码转换成为对象的格式,对象包含一些常用方法比如查找,获取属性等等,并且遵循网页的标签化的组织形式,类似于一个树,根节点是网页的根标签,其余节点以子节点的方式组织。
下面利用上述两个包来实现一个非常简单的爬虫来大概理解一下

实现

import requests
from bs4 import BeautifulSoup
#使用requests包中的get方法获得网页的源代码,设置编码格式
response = requests.get(url='http://www.autohome.com.cn/news/')
response.encoding = 'gbk'

#将得到的源代码利用下面的实例化方法转换为树状的对象树,每一个对象代表一个
#html标签,标签可以搜索到子标签
root = BeautifulSoup(response.text,features='html.parser')
#针对上述根节点搜索其标签id=auto-channel-lazyload-article的子节点,如上面源代码图所示
div = root.find(id='auto-channel-lazyload-article')
#得到的div标签下有多个li标签,利用findall方法返回一个对象列表
li_list = div.find_all('li')
#遍历这个对象列表,对每一个li标签进行处理
for li in li_list:
	#获得li标签下的a标签
    a = li.find('a')
    if a:
    	#a.attrs可以获得a标签的属性字典,依次获得h3标签(标题),img标签(配图)
    	#需要注意,每个find返回的都是以对象形式存储的标签,可以调用attrs,text,,id,分别获得标签的属性,文本,名称
    	#(标签相关的规则在xml的基本格式说明中)
        print(a.attrs.get('href'))
        h3 = a.find('h3')
        print(h3.text)
        img = a.find('img')
        print(img.attrs.get('src'))
        #这里我们还可以直接将图片下载下来,向图片链接发送请求获得图片的数据流,写入本地即可
        img_res = requests.get(url = 'http:' + img.attrs.get('src'))
        img_file_name = h3.text + '.jpg'
        with open(img_file_name,'wb') as img_file:
            img_file.write(img_res.content)

猜你喜欢

转载自blog.csdn.net/qq_38876114/article/details/86622871