欢迎大家来到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世界,在知识的湖畔探索吧!
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')
如何解析它的问题,通过下面的案例进行讲解。
# 爬取当当网数据 #
引入库
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()
爬取结果
结语
本文通过requests+bs4库实现对网络数据的爬取。不涉及对爬取数据的分析。
本案例仅仅是一个入门级的爬取数据的演示案例。有关HTML、requests库、BeautifulSoup库的内容还非常多,本文的用法仅仅沧海一粟。
网上有大量的有这两个库的介绍和使用方法介绍,感兴趣的朋友可以在网上进行详细的学习。
不能光看,还是要自己动手去调试。“眼过千遍,不及手过一遍”。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37401.html