理解爬虫原理

作业来源: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类型,点击次数为数值型,其它是字符串类型。

posted @ 2019-04-01 13:38  何铠江  阅读(219)  评论(0编辑  收藏  举报