python爬虫(二)——第一个爬虫程序

本文介绍如何使用BeautifulSoup库处理HTML和XML文档,包括解析文档、导航树结构、搜索特定元素等技巧。BeautifulSoup能自动处理编码问题,简化了网页数据抓取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. BeautifulSoul      

    

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

    Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。 

  通过定位 HTML 标签来格式化和组织复杂的网络信息,用简单易用的 Python 对象为我们展现 XML 结构信息。 它包含三个对象:

  • BeautifulSoup
  • Tag
  • NavigableString

    使用方法:

  1>导入bs4库和urllib库(用于打开html网页):

    

from bs4 import BeautifulSoup
from urllib.request import urlopen

  2>创建一个BeautifulSoup对象:

  

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsObj = BeautifulSoup(html)

  其中,http://www.pythonscraping.com/pages/page3.html  是一个简单的用于测试爬虫程序的网页:

  3>.find() 与 .findAll() 函数

   例如:nameList = bsObj.findAll("span", {"class":"green"}) ;抽取所有属性为 green的span标签内的文字,find()和findAll()是最常用的两个函数,借助它们,利用标签的不同属性轻松地过滤HTML页面,查找需要的标签组或者标签。

  用法:

  •   findAll(tag, attributes, recursive, text, limit, keywords)
  •   find(tag, attributes, recursive, text, keywords)

  多数情况下可能只需要用到前两个参数,tag和attributes,attributes指HTML标签的属性,递归参数 recursive 是一个布尔变量。你想抓取 HTML 文档标签结构里多少层的信息?如果recursive 设置为 TruefindAll 就会根据你的要求去查找标签参数的所有子标签,以及子标签的子标签。如果 recursive 设置为 FalsefindAll 就只查找文档的一级标签。 findAll默认是支持递归查找的( recursive 默认值是 True);一般情况下这个参数不需要设置,除非你真正了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数

      text参数用于匹配标签的文本内容,如:nameList = bsObj.findAll(text="the prince")

  keword可以选择具有制定属性的标签。

      

  2. 第一个爬虫程序:

  先贴代码:

from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def getTitle(url):
    try:
        html = urlopen(url)
    except HTTPError as e:
        return None
    try:
        bsObj = BeautifulSoup(html.read(),'lxml')
        title = bsObj.body.h1
    except AttributeError as e:
        return None
    return title
title = getTitle("http://www.pythonscraping.com/pages/page1.html")
if title == None:
    print("Title could not be found")
else:
    print(title)

  输出目标网页内title标签内的文本:<h1>An Interesting Title</h1>,getTitle()函数返回网页的标题,如果获取网页遇到问题就返回一个 None 对象。 如果服务器不存在, html 就是一个 None 对象,html.read() 就会抛出 AttributeError 。


    

转载于:https://www.cnblogs.com/Issac-Gan/p/6505808.html

Python爬虫应用于抓取百度图片通常涉及使用第三方库如`requests`, `BeautifulSoup` 或者 `Scrapy`框架。以下是基本步骤: 1. **导入所需库**: 首先,你需要安装`requests`库来发送HTTP请求,以及可能需要的如`bs4`(BeautifulSoup4)用于解析HTML内容。 ```python import requests from bs4 import BeautifulSoup ``` 2. **发送GET请求**: 使用`requests.get()`函数获取百度图片搜索结果的网页源码。 ```python url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&stc=1&fr=&sf=1&fmq=1689375560990_R&pv=&ic=0&nc=1&z=&word=' + keyword response = requests.get(url) ``` 这里`keyword`是你想要搜索的图片关键字。 3. **解析HTML**: 使用BeautifulSoup解析返回的HTML,找到包含图片URL的部分。这通常涉及到查找`<img>`标签的`src`属性。 ```python soup = BeautifulSoup(response.text, 'lxml') img_tags = soup.find_all('img', src=True) # 查找所有有src属性的<img>元素 ``` 4. **提取图片URL**: 循环遍历`img_tags`,提取每个图片链接。 ```python image_urls = [img['src'] for img in img_tags] ``` 5. **保存图片**: 可以使用`requests`库下载图片到本地,如果图片地址是HTTP的话。记得处理可能出现的网络错误。 ```python for url in image_urls: try: response = requests.get(url, stream=True) with open(f'{keyword}_{i}.jpg', 'wb') as f: for chunk in response.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) except Exception as e: print(f"Failed to download {url}: {e}") ``` 6. **注意事项**: - 爬虫操作需遵守百度的robots.txt规则,并尊重版权,合理使用抓取数据。 - 实际操作可能会遇到反爬虫策略,可能需要设置延迟、用户代理等。 - 如果需要大规模抓取,最好使用Scrapy等专业的爬虫框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值