zoukankan      html  css  js  c++  java
  • 爬虫

    一、收集处理数据分三步:

    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

     
  • 相关阅读:
    POJ1028 Web Navigation【堆栈+模拟】
    UVa10276 HDU1329 ZOJ1239 Hanoi Tower Troubles Again!【递推函数+打表】
    UVALive5369 UVa732 HDU1515 ZOJ1004 Anagrams by Stack【DFS+堆栈】
    HDU5776 sum【前缀和+模除】
    POJ1844 Sum【水题+数学题】
    AOJ0558 Cheese【BFS】
    POJ3009 Curling 2.0【DFS】
    HDU1163 Eddy's digital Roots(解法二)【快速模幂+九余数定理】
    HDU1210 Eddy's 洗牌问题【递推函数+模拟】
    Vijos P1571 笨笨的导弹攻击【最长上升子序列+DP】
  • 原文地址:https://www.cnblogs.com/wskxy/p/7219961.html
Copyright © 2011-2022 走看看