网络爬虫
import requests //网络资源获取套件 res = requests.get("http://news.sina.com.cn/society/") //获取该网址源码 res.encoding = 'utf-8' //以免汉字部分出现乱码 print(res.text) //打印HTML源码
import requests from bs4 import BeautifulSoup res = requests.get("http://news.sina.com.cn/society/") res.encoding = 'utf-8' soup = BeautifulSoup(res.text,'html.parser') //res.text表示HTML代码 parser:剖析器 print(soup.text) //输出过滤后的HTML代码 基本剩下文字和一些特殊代码
import requests from bs4 import BeautifulSoup res = requests.get("http://news.sina.com.cn/society/") res.encoding = 'utf-8' soup = BeautifulSoup(res.text,'html.parser') alink = soup.select('a') //取出包含a标签的元素 print(alink)
print(alink[0]) //获取 所取出a标签元素中的第一个a标签元素
print(alink.text) //只获取 内文
//取得含有CSS属性的元素
//取出所有class为news的a标签,class前面要加.
soup = BeautifulSoup(res.text,'html.parser')
for news in soup.select('.news'): //冒号千万不能省略 语法易错点
print(news)
print(news['href']) //获取href属性
//取出所有id为title的a标签,id前面要加# alink = soup.select('#title')
print(alink)
import requests from bs4 import BeautifulSoup res = requests.get("http://news.sina.com.cn/society/") res.encoding = 'utf-8' soup = BeautifulSoup(res.text,'html.parser') for news in soup.select('.news-item'): //news是新建的变量 表示每一块资料 冒号不能省 if len(news.select('h2'))>0: h2 = news.select('h2')[0].text //如果没有text 会有其他代码 a = news.select('a')[0]['href'] //[0]是为了将链表的次序解开,因为select返回的是一个列表
print(h2,a)
h = soup.select('#header')[0].text //获取文章标题 title标签,id 为 header
//假设时间和来源处于同一个span标签里,顺序为先时间,再内嵌一个span标签,里面有来源(处于a标签的内文)
time = soup.select('.post-data')[0].contents[0].strip()//取得发布时间 span标签 clss 为post-data , contents使HTML内容序列化,从而将时间和来源分为两个部分,[0]取得时间的部分 ,strip()移除\t
//此时time是字符串类型,应该以时间格式存入数据库
source = soup.select('.data-source' span a)[0].text //取得来源 表示class标签data—source 下 span标签 下 a标签的内文
from datetime import datetime dt = datetime.strptime(time,'%Y年%m月%d日%H:%M') //字符串转时间 dt.strftime('%Y-%m-%d') //时间转字符串