爬虫是一种按照一定规则,自动抓取互联网上网页中的相应信息的程序或脚本。
1.需求分析
2.找到要爬取信息的网站
3.下载request(网站返回的内容)
4.利用正则表达式-re,xpath-lxml(通过返回的信息找到需要爬取的数据内容)
5.找到mysql(存储找到的数据内容)
网页抓取
网页解析
数据存储
1.遵守Robots协议(网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯),谨慎爬取
2.限制爬虫行为,禁止近乎DDOS(通过大量的数据包和目标服务器建立连接,占用目标服务器的带宽,导致目标服务器无法再去为正常的用户提供服务,表现为服务器炸了)的请求频率,一旦造成服务器瘫痪,约等于网络攻击
3.对于明显反爬,或者正常情况不能到达的页面不能强行突破,否则是Hacker行为
4.如果爬取到别人的隐私,立即删除,降低进局子的概率
2.静态网页和动态网页的区分
请填空描述,并各举一个例子进行描述,要求对案例进行抓图讲述。
静态页面是随着HTML代码的生成,页面的内容和显示效果就基本不会发生变化(除非修改页面代码)
动态页面,虽然同样页面代码不发生变化,但是其显示的内容确实可以随着时间环境或者数据操作的结果而发生变化。
静态页面和动态页面的认识应该定位在:是否有数据库加工这个环节。
请描述Urllib库的功能,并举例讲述如何使用Urllib库打开一个网页
urllib是Python内置的HTTP请求库,它包含4个模块:
1.request:最基本的HTTP请求模块,可以用来模拟发送请求。
2.error:异常处理模块,如果出现请求错误,可以捕获异常,然后进行重试或其他操作。
3.parse:工具模块,提供了许多URL处理方法,如拆分、解析、合并等。
4.robotparser:主要用于识别网站的rebots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬。
请描述Beautifulsoup库的功能,并举例讲述如何使用Beautifulsoup解析html数据。
解析html、简单获取网页标签信息、定位标签并获取内容
任务要求
编写程序,翻页爬取我校主页上的学院动态模块的全部信息,具体要求如下:
(1)爬取地址为:https://www.hist.edu.cn/index/sy/xydt.htm。
(2)爬取模块列表中的三部分信息:院系,标题和 URL 地址信息。
(3)将爬取的信息存储到文件“xueyuandongtai.txt”中,一行显示一条,
信息院系,、标题和 URL 地址信息之间用逗号隔开。
import urllib.request
from bs4 import BeautifulSoup
# 输入url,返回该网页的源码
def getURL(urls):
contents = []
for url in urls:
res = urllib.request.urlopen(url)
contents.append(res.read().decode('utf-8'))
# print(contents)
return contents
# 输入content源码,返回lists数据
def resolveHtml(contents):
lists = set()
for content in contents:
soup = BeautifulSoup(content, "html.parser")
divs = soup.find_all('div', {'class': 'list-main-warp'})
# print(len(divs))
lis=divs[0].find_all('li')
# print(len(lis))
for li in lis:
one=""
#院系
yuanxi_title=li.find_all('a')[0].string
yuanxi=yuanxi_title.split("\xa0\xa0")[0]
#url
url=li.find_all('a')[0].get("href")
#标题
title=li.find_all('a')[0].get("title")
one=url+","+title+","+yuanxi
lists = lists | {one}
# print(lists)
return lists
# saveInfo:
# 输入:lists,filename
# 功能: 将lists中数据写入文件filename中
def saveInfo(lists,filename):
with open(filename,"a+",encoding="utf-8") as fp:
for i in lists:
fp.write(i+"\n")
def main():
urls = ["https://www.hist.edu.cn/index/sy/xsbg/{}.htm".format(str(i)) for i in range(1,29)]
urls.append("https://www.hist.edu.cn/index/sy/xsbg.htm")
# print(urls)
contents=getURL(urls)
lists=resolveHtml(contents)
filename="xueyuandongtai.txt"
saveInfo(lists,filename)
if __name__ == "__main__":
main()