《Python网络数据采集》笔记之BeautifulSoup

一  初见网络爬虫

都是使用的python3。

一个简单的例子:

from  urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
print(html.read())

在 Python 2.x 里的 urllib2 库, 在 Python 3.x 里,urllib2 改名为 urllib,被分成一些子模块:urllib.request、 urllib.parse 和 urllib.error。

二  BeautifulSoup

1.使用BeautifulSoup

注意:1.通过pip install  BeautifulSoup4 安装模块

2. 建立可靠的网络连接,能处理程序可能会发生的异常

如下面这个例子:

from urllib.error import HTTPError
from urllib.request import urlopen
from  bs4 import BeautifulSoup

def getTitle(url):
    try:
        html = urlopen(url)
    except HTTPError as e:
        return None
    try:
        bsobj = BeautifulSoup(html.read())
        title = bsobj.body.h1
    except AttributeError as e:
        return None
    return title
title = getTitle("http://pythonscraping.com/pages/page1.html")
if title == None:
    print("title was not found")
else:
    print(title)

2. 网络爬虫可以通过 class 属性的值,获得指定的内容

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://pythonscraping.com/pages/warandpeace.html")

bsobj = BeautifulSoup(html)

# 通过bsobj对象,用fillAll函数抽取class属性为red的span便签
contentList = bsobj.findAll("span",{"class":"red"})

for content in contentList:
    print(content.get_text())
    print(‘\n‘)

3. 通过导航树

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://pythonscraping.com/pages/page3.html")
bsobj = BeautifulSoup(html)

#找出子标签
for child in bsobj.find("table",{"id":"giftList"}).children:
    print(child)

#找出兄弟标签
for silbling in bsobj.find("table",{"id":"giftList"}).tr.next_siblings:
    print(silbling)

for h2title in bsobj.findAll("h2"):
     print(h2title.get_text())

print(bsobj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())

5. 正则表达式和BeautifulSoup

from urllib.request import urlopen
from bs4 import BeautifulSoup
import  re

html = urlopen("http://pythonscraping.com/pages/page3.html")
bsobj = BeautifulSoup(html)
#返回字典对象images
images = bsobj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
for image in images:
    print(image["src"])
时间: 2024-10-14 17:11:18

《Python网络数据采集》笔记之BeautifulSoup的相关文章

笔记之Python网络数据采集

笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, 有api可用, api会比写网络爬虫程序来获取数据更加方便. Part1 创建爬虫 Chapter1 初建网络爬虫 一旦你开始采集网络数据, 就会感受到浏览器为我们所做的所有细节, 它解释了所有的html, css, JavaScript 网络浏览器是一个非常有用的应用, 它创建信息的数据包, 发送

《python 网络数据采集》代码更新

<python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import BeautifulSoup 3 html = urlopen(url) 4 bsobj = BeautifulSoup(html) 我也跟着输入这一段代码,但会出现提示: UserWarning: No parser was explicitly specified, so I'm using the best availa

《深入浅出Python》与《Python网络数据采集》读后感

本学期在课程之外,自主计划学习Python语言以及爬虫知识.书籍方面,采用了O`Reilly的<深入浅出Python>与<Python网络数据采集>.前者用于Python语法的学习,后者则作为爬虫知识的详解. 与我们日常使用的教材不同的是,<深入>像是一个老鸟,在一步一步通过对话的形式手把手地教你.个人体会,该书作为入门教材,十分妥当,但是深入理解还需另辟蹊径.全书从文本处理出发讲解基础语法,再设计背景,随着假设要求不断扩展,将Python语言在web开发.Androi

Python网络爬虫笔记(五):下载、分析京东P20销售数据

(一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面的请求. 从Preview页签可以看出,这个请求是获取评论信息的 2.      对比第一页.第二页.第三页-请求URL的区别 可以发现 page=0.page=1,0和1指的应该是页数. 第一页的 request url:没有这个rid=0& . 第二.三页-的request url:多了这个ri

学习爬虫:《Python网络数据采集》中英文PDF+代码

适合爬虫入门的书籍<Python网络数据采集>,采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互.第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络. <Python网络数据采集>高清中文PDF,224页,带目录和书签,能够复制:高清英文PDF,255页,带

Python网络数据采集pdf

下载地址:网盘下载 内容简介  · · · · · · 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互.第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络. 作者简介  · · · · · · Ryan Mitchell 数据科学家.软件工程师,目前在波士顿Link

《Python网络数据采集》读书笔记(一)

思考"网络爬虫"时通常的想法: ? 通过网站域名获取 HTML 数据 ? 根据目标信息解析数据 ? 存储目标信息 ? 如果有必要,移动到另一个网页重复这个过程 当网络浏览器遇到一个标签时,比如<img src="cuteKitten.jpg">,会向服务器发起另一个请求,以获取cuteKitten.jpg文件中的数据为用户充分渲染网页.但是,我们的Python程序没有返回并向服务器请求多个文件的逻辑,它只能读取我们已经请求的单个HTML文件. 1.初识u

《Python网络数据采集》读书笔记(四)

1.遍历单个域名 维基百科那些指向词条页面(不是指向其他内容页面)的链接有三个共同点: ? 它们都在id是bodyContent的div标签里 ? URL链接不包含分号 ? URL链接都以/wiki/开头 # -*- coding: utf-8 -*- import re from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen("http://en.wikipedia.org/wiki/Kev

《Python网络数据采集》读书笔记(二)

1.通过的名称和属性查找标签 和之前一样,抓取整个页面,然后创建一个BeautifulSoup对象.这里面"lxml"解析器需要另外下载. pip3 install lxml >>> from urllib.request import urlopen >>> from bs4 import BeautifulSoup >>> html = urlopen("http://www.pythonscraping.com/pa