16爬虫实验:requests+bs4

16爬虫实验:requests+bs4然而,这些年我与网络却愈行愈远,很多网络新技术新方法新工具仅仅是听说,实际却没有真正去使用过。您可以使用 HTML 来建立自己的 WEB 站点。

欢迎大家来到IT世界,在知识的湖畔探索吧!

很多年前都听说爬虫,听名字感觉很神奇,凭直觉理解为用计算机程序收集网络数据的一种形象表达。

不知不觉,3G、4G、5G….nG已经融入了大家的日常生活,似乎有一种“没有网络,浑身不舒服”的感觉,我们的生活已经和ta融合了。然而,这些年我与网络却愈行愈远,很多网络新技术新方法新工具仅仅是听说,实际却没有真正去使用过。回忆起来,很心痛!也为了迎头赶上,今天从早到晚,紧赶慢赶废寝忘食,学习调试了一个小小的入门级爬虫,也许它会带领我打开爬虫之旅……

在写这个案例之前,实际上我已经做了好几个案例,明天学生们也就暑假收假返校了,老师们也都要进入新学期,思前想后,作为老师的我,为迎接2021级我院学生,决定还是给21级会计专业新生们送上一本书吧!——《会计学基础》。

基于这样的考虑,本文利用python requests+bs4库,实现对当当网《会计学基础》数据的爬取。

这里仅作为爬取数据的案例,暂时不涉及对爬取数据的分析。如果要学习如何分析数据,请参阅我之前的公众号相关内容。

Requests+bs4库

Requests库的官方文档指出:让HTTP服务于人类。Requests库的作用就是请求网站获取网页数据的。通过该库,能将我们想要向网络发送或者向网络请求的需求发送给网络,进而网络响应后返回信息。

  • 一个简单的测试:
import requests 
url = 'https://www.baidu.com'
r = requests.get(url)
r.encoding = r.apparent_encoding
print(r.text)

欢迎大家来到IT世界,在知识的湖畔探索吧!

16爬虫实验:requests+bs4

r.text 的内容是HTML格式的内容,在HTML里就包含的有我们想要的数据和信息。接下来,就是对上面HTML所表示的文档的数据分析和提取。

HTML,即超文本标记语言(HyperText Markup Language)是一种用于创建网页的标准标记语言。很多标签都是成对的,“树状结构”,通常形象的表述为“HTML标签树”。

您可以使用 HTML 来建立自己的 WEB 站点。

bs4,Beautiful Soup库是解析、遍历、维护“HTML标签树”的功能库。在爬虫中用于解析HTML包含的数据。

  • 一个简单的测试:
欢迎大家来到IT世界,在知识的湖畔探索吧!import requests 
from bs4 import BeautifulSoup
url = 'https://www.scy.cn/'
response = requests.get(url)
response.encoding = response.apparent_encoding
html = response.text
soup = BeautifulSoup(html,'lxml')
16爬虫实验:requests+bs4

如何解析它的问题,通过下面的案例进行讲解。

# 爬取当当网数据 #

引入库

import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd

获取指定网址的html

欢迎大家来到IT世界,在知识的湖畔探索吧!def getHtml(url):
    req = requests.get(url)
    res = req.text
    return res

从HTML解析数据行列标签

def parserHtml(res):
    soup = BeautifulSoup(res,'lxml')    
    ul = soup.find_all(name='ul',class_="bigimg",id="component_59")
    li = ul[0].find_all('li')
    return li

从标签中获取相关信息

def getInfo(li):
    for i in range(len(li)):
        if li[i].find_all('a',dd_name="单品标题")==[]:
            bookName  =''
        else:
            bookName = li[i].find_all('a',dd_name="单品标题")[0]['title']
        if li[i].find_all('a',dd_name="单品作者")==[]:
             author =''
        else:
            author = li[i].find_all('a',dd_name="单品作者")[0]['title']
        if li[i].find_all('a',dd_name="单品出版社")==[]:
            press =''
        else:
            press = li[i].find_all('a',dd_name="单品出版社")[0]['title']
        if li[i].find_all('p',class_="price")==[]:
            price = ''
        else:
            price = li[i].find_all('p',class_="price")[0].get_text()
        if li[i].find_all('p', class_="search_star_line")==[]:
            commit = ''
        else:
            commit = li[i].find_all('p', class_="search_star_line")[0].get_text()
    return bookName,author,press,price,commit

创建csv文件用于保存数据

def creatCSV(CSVName):
  # 创建文件对象
    f = open(CSVName,'w',encoding='utf-8')
    #f = open(CSVName,'a+',encoding='utf-8')
    # 基于文件对象构建 csv写入对象
    csv_writer = csv.writer(f)
    # 构建列表头
 csv_writer.writerow(["bookName","author","press","price","commit"])
    # 在下面的程序中写入csv文件内容
    return f,csv_writer

将爬到的数据写入CSV文件

def  writeCSV(csv_writer,bookName,author,press,price,commit):
 csv_writer.writerow([bookName,author,press,price,commit])

入口

if __name__=='__main__':
     # 创建文件对象
    CSVName = "基础会计.csv"
    f,csv_writer = creatCSV(CSVName)
    page = 100
    for i in range(page):
        url = 'http://search.dangdang.com/?key=%BB%F9%B4%A1%BB%E1%BC%C6&act=input&page_index='+str(i+1)
        res = getHtml(url)
        li = parserHtml(res)
        bookName,author,press,price,commit = getInfo(li)
        csv_writer.writerow([ bookName,author,press,price,commit])
    # 关闭文件
f.close()

爬取结果

16爬虫实验:requests+bs4

16爬虫实验:requests+bs4

结语

本文通过requests+bs4库实现对网络数据的爬取。不涉及对爬取数据的分析。

本案例仅仅是一个入门级的爬取数据的演示案例。有关HTML、requests库、BeautifulSoup库的内容还非常多,本文的用法仅仅沧海一粟。

网上有大量的有这两个库的介绍和使用方法介绍,感兴趣的朋友可以在网上进行详细的学习。

不能光看,还是要自己动手去调试。“眼过千遍,不及手过一遍”。

16爬虫实验:requests+bs4

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37401.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信