一、收集处理数据分三步:
import requests
from bs4 import BeautifulSoup
from datetime import datetime #转换时间格式
newsurl = 'http://news.sina.com.cn/china/' #链接
1.提取
res = requests.get(newsurl) #get方式访问链接,并把网页源码赋给res
res.encoding = 'utf-8' #转字符串编码,防止乱码
2.处理
soup = BeautifulSoup(res.text, 'html.parser') #用BeautifulSoup抓取文本,第一个参数是要抓取的html文本,第二个是使用哪种解析器
3.输出
for news in soup.select('.news-item'): #循环选择文本内的标签
if len(news.select('h2 a'))>0: #如果为空,不输出
print news.select('h2 a')[0].text,news.select('h2 a')[0]['href'],news.select('.time')[0].text #打印提取文本链接时间
二、部分操作:
suop.select('.news-item')[0]里面存在多个无关标签信息
可以用suop.select('.news-item')[0].contents将其变成列表,在取列表中需要的信息
比如:需要取第一个信息,suop.select('.news-item')[0].contents[0]
若信息内存在多余的空格或者 ...
可以用suop.select('.news-item')[0].contents[0].strip()消除
例子:
>>> a = ' 123'
>>> a.strip()
'123'
>>> a=' abc'
'abc'
>>> a = 'sdff '
>>> a.strip()
'sdff'
转换时间格式:
网站中提取出来的timesource时间为字符串
假设为timesource="2017年10月01日22:22"
字符串转时间:dt=datetime.strptime(timesource,'%Y年%m月%d日%H:%M') #两个参数第一个为时间源,第二个为时间源的格式,这样dt就是对应的type为时间
时间格式:2017-10-01 dt.strftime('%Y-%m-%d')
三、json中提取信息
提取js中的信息(Response看的不清楚,使用Preview比较方便,Preview把这个资料整理成Json,所以用json提取信息,url在Headers中,还有method方法)
# coding=utf-8
import requests
import json
from bs4 import BeautifulSoup
newsurl = 'http://comment5.news.sina.com.cn/page/info?version=1&
format=js&channel=gn&newsid=comos-fyihrwk1824136&group=&compress=0&
ie=utf-8&oe=utf-8&page=1&page_size=20'
res = requests.get(newsurl)
res.encoding = 'utf-8'
# soup = BeautifulSoup(res.text, 'html.parser')#取得的是json所以不用BeautifulSoup
jd = json.loads(res.text.strip('var data='))
print jd['result']['count']['total']
四、切割
newsurl1='http://news.sina.com.cn/c/nd/2017-07-22/doc-ifyihrwk1824136.shtml'
方法一
newid=newsurl1.split('/')[-1].rstrip('.shtml').lstrip('doc-i')
print newid
结果fyihrwk1824136
方法二
import re
newid=re.search('doc-i(.*).shtml',newsurl1)
print newid.group(0)
print newid.group(1)
结果doc-ifyihrwk1824136.shtml
fyihrwk1824136