作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2881
1. 简单说明爬虫原理
向网站发出请求,采取遍历把公开信息都得到,然后筛选有用的信息返回自己的服务器。
2. 理解爬虫开发过程
1).简要说明浏览器工作原理;
1.首先选取一部分精心挑选的种子URL;
2.将这些URL放入待抓取URL队列;
3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。
4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
2).使用 requests 库抓取网站数据;
requests.get(url) 获取校园新闻首页html代码
r = requests.get('https://www.csdn.net/')
3).了解网页
写一个简单的html文件,包含多个标签,类,id
html_sample = ' <html> <body> <h1 id="title">Hello Word</h1> <a href="#" class="link"> link</a> <a href="# link2" class="link" qao=1> link 2</a> </body> </html> '
4).使用 Beautiful Soup 解析网页;
通过BeautifulSoup(html_sample,'html.parser')把上述html文件解析成DOM Tree
select(选择器)定位数据
找出含有特定标签的html元素
找出含有特定类名的html元素
找出含有特定id名的html元素
# 导入相关库 from bs4 import BeautifulSoup import time import requests url_lianjia = 'https://hz.lianjia.com/ershoufang/' headers = {#模拟浏览器请求,可以用 cookie模拟登陆状态 'User-Agent':'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36', } time.sleep(4) #延时请求 wb_data = requests.get(url_lianjia, headers=headers) #使用requests向服务器发起get请求,通过header模拟浏览器行为 soup = BeautifulSoup(wb_data.text, 'lxml') #将服务器返回的对象使用BeautifulSoup解析,wb_data为response对象,需要文本化 # 确定要抓取的元素位置 titles = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.title > a') #返回值类型为list imgs = soup.select('body > div.content > div.leftContent > ul > li > a > img') total_prices = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.priceInfo > div.totalPrice > span') unit_prices = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.priceInfo > div.unitPrice > span') tags = soup.select('body > div.content > div.leftContent > ul > li > div.info.clear > div.tag') # 数据格式化,最终放到字典中 for title, img, total_price, unit_price, tag in zip(titles, imgs, total_prices, unit_prices, tags): data = { 'title': title.get_text(), 'img': img.get('src'), 'total_price': total_price.get_text(), 'unit_price': unit_price.get_text(), 'tag': list(tag.stripped_strings) } print(data)
}
3.提取一篇校园新闻的标题、发布时间、发布单位、作者、点击次数、内容等信息
如url = 'http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'
要求发布时间为datetime类型,点击次数为数值型,其它是字符串类型。