• python网页信息抓取


    自动抓取网页信息,也就是爬虫,一般通过js或者python都可以较方便的实现。都是通过

    模拟发送页面请求,然后解析html页面的元素来提取信息。

    例如js的实现方法:https://github.com/jackieli123723/ci

    function wraperAxiosHour(cityCode) {
      return new Promise((resolve, reject) => {
        const url = `http://www.weather.com.cn/weather1dn/${cityCode}.shtml`;
        axios
          .get(url)
          .then(function(response) {
            const $ = cheerio.load(response.data, {
              decodeEntities: false
            });
    
            let hasBody = $("body").html();
            if (hasBody == "") {
              let errorInfo = {
                msg: "城市代码错误",
                code: 500
              };
              reject(errorInfo);
              return;
            }
    
            let todayData = $(".todayRight script")
              .html()
              .replace("var hour3data=", "")
              .replace(/
    /g, "")
              .split(";");
    
            todayData.pop();
    
            //24小时
            // console.log(jsonToObj(todayData[0]))
            let forecastList1 = getPerTimeList(jsonToObj(todayData[0])[0])
              .drgeeData;
            let forecastList2 = getPerTimeList(jsonToObj(todayData[0])[1])
              .drgeeData;
    
            let forecastListob = forecastList1.concat(forecastList2);
    
            let forecastList = forecastListob.slice(0, 24);
    
            let lifeAssistant = getLv(0, $);
    
            let sunup = jsonToObj(todayData[7].replace("var sunup =", ""))[1];
            let sunset = jsonToObj(todayData[8].replace("var sunset =", ""))[1];
            let max_degree = jsonToObj(
              todayData[3].replace("var eventDay =", "")
            )[2];
            let min_degree = jsonToObj(
              todayData[4].replace("var eventNight =", "")
            )[1];
    
            // console.log(max_degree,min_degree,sunup,sunset)
    
            resolve({
              forecastList,
              lifeAssistant,
              max_degree,
              min_degree,
              sunup,
              sunset
            });
          })
          .catch(err => reject(err));
      });
    }
    

     python的做法:

    python3中requests库和urllib包都可以用来发送请求,注意urllib已经升级到3了。

    区别:(转)
    1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

    2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

    3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

    4)处理响应:第一种处理消息头部、.getcode()、响应状态码和响应正文时分别使用.info()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

    5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,“connection”:“close”,说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,“connection”:“keep-alive”,说明多次请求使用一个连接,消耗更少的资源

    6)编码方式:requests库的编码方式Accept-Encoding更全

    获取html以后,一种是直接使用python的re的正则表达式模块。一种是用BeautifulSoup 来解析。

    def getTemp(html):
        text = "".join(html.split())
        patten = re.compile('<divclass="tqtongji2">(.*?)</div><divstyle="clear:both">')
        table = re.findall(patten, text)
        patten1 = re.compile('<ul>(.*?)</ul>')
        uls = re.findall(patten1, table[0])
        rows = []
        for ul in uls:
            patten2 = re.compile('<li>(.*?)</li>')
            lis = re.findall(patten2, ul)
            time = re.findall('>(.*?)</a>', lis[0])[0]
            high = lis[1]
            low = lis[2]
            rows.append((time, high, low))
        return rows
    

      

    soup = BeautifulSoup(text, 'html5lib')
        conMidtab = soup.find("div", class_="conMidtab")
        tables = conMidtab.find_all('table')
    
  • 相关阅读:
    AJAX 三级联动
    AJAX JSON类型返回
    AJAX 汽车详细信息练习
    JQ AJAX
    对话框关联两个Layout时
    删除,拨打电话,发送短信对话框
    自定义对话框,时间日期对话框
    一般对话框,单选复选对话框
    JAVA。String转Int
    加监听器,单选复选按钮
  • 原文地址:https://www.cnblogs.com/marszhw/p/12346151.html
Copyright © 2020-2023  润新知