Web网页树形列表中落到实处选中父节点则子节点

作者:编程技术

 

博客搬迁,给你带来的不便,敬请谅解!

1 反爬虫问题

 

http://www.suanliutudousi.com/2017/11/15/js中几种动态创建元素并设置文本内容的比较,及性/

1.1 修改请求 header

import requests

res = requests.get('')

print (res.request.headers)

{'Accept': '*/*', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'python-requests/2.13.0'}

import requests

link = ''

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}

res = requests.get(' = headers)

print (res.request.headers)

{'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'BD_LAST_QID=15170628438630354200; BAIDUID=D0A736BD264B0E2114878CFDF79F9381:FG=1; BIDUPSID=D0A736BD264B0E2114878CFDF79F9381; PSTM=1514343988', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}

 1 /// <summary>
 2         /// 创建子节点
 3         /// </summary>
 4         /// <param name="list">list</param>
 5         /// <returns></returns>
 6         public string GetTreeNode(IList list)
 7         {
 8             Info_Veh_Team info_veh_team = new Info_Veh_Team();
 9             StringBuilder sb_TreeNode = new StringBuilder();
10             List<Info_Veh_Team> itemNode = IListHelper.IListToList<Info_Veh_Team>(list);   
11   
12             int index1 = 0;
13             string strclass = "";
14             if (itemNode.Count > 0)
15             {
16                 sb_TreeNode.Append("<ul>");
17                 foreach (Info_Veh_Team entity in itemNode)
18                 {
19                     if (index1 == 0)
20                         strclass = "collapsableselected";
21                     else
22                         strclass = "";
23                     sb_TreeNode.Append("<li>");
24                     sb_TreeNode.Append("<div class='"   strclass   "'><input id='"   entity.team_id   "' type='checkbox' id1='"   index1   "' />"   entity.team_name   "</div>");
25                     
26                     info_veh_team = info_veh_teamibll.GetEntity(entity.team_id);
27                     StringBuilder where = new StringBuilder();
28                     where.Append("and team_id='"   info_veh_team.team_id   "'");      
29                     IList nextlist = info_team_memberibll.GetListWhere(where, null);
30                     sb_TreeNode.Append(GetTreeNodeNext(nextlist, index1));
31                     sb_TreeNode.Append("</li>");
32                     index1  ;
33                 }
34                 sb_TreeNode.Append("</ul>");
35             }
36             return sb_TreeNode.ToString();
37         }
38         /// <summary>
39         /// 创建子节点
40         /// </summary>
41         /// <param name="list">list</param>
42         /// <returns></returns>
43         public string GetTreeNodeNext(IList list, int index1)
44         {
45             StringBuilder sb_TreeNode = new StringBuilder();
46             List<Info_Team_Member> itemNode = IListHelper.IListToList<Info_Team_Member>(list);
47             int index = 0;
48             string strclass = "";
49             if (itemNode.Count > 0)
50             {
51                 sb_TreeNode.Append("<ul>");
52                 foreach (Info_Team_Member entity in itemNode)
53                 {
54                     if (index == 0)
55                         strclass = "collapsableselected";
56                     else
57                         strclass = "";
58                     sb_TreeNode.Append("<li>");
59                     sb_TreeNode.Append("<div class='"   strclass   "'><input id='"   entity.member_id   "' type='checkbox'  name='"   index1   "' id2='"   index1   "' id3='"   entity.veh_lpn   "'/>"   entity.veh_lpn   "</div>");
60                     sb_TreeNode.Append("</li>");
61                     index  ;
62                 }
63                 sb_TreeNode.Append("</ul>");
64             }
65             return sb_TreeNode.ToString();
66         }

2 解决中文乱码

Python3默认的字符编码是Unicode。

字符串的编码使用str和bytes两种类型。

(1) str字符串:使用Unicode编码

(2) bytes字符串:使用Unicode转换成的某种类型的编码,如UTF-8、GBK

其中默认的str字符串转化为bytes???

encode:将Unicode编码转换成为其他编码的字符串;

decode:将其他编码的字符串转换成为Unicode编码。

1  获取网站的中文显示乱码

import requests

from bs4 import BeautifulSoup

url = ''

res = requests.get(url)

res.encoding = 'GBK'

res.encoding

2  网页使用gzip压缩

import requests

url = ''

res = requests.get(url)

print (res.text)

import chardet

after_gzip = res.content

print ('解压后字符串的编码为',chardet.detect(after_gzip))

print (after_gzip.decode('utf-8'))

3  读写文件的中文乱码

title = '我们'

with open('title.txt', 'a ', encoding='utf-8') as f:

    f.write(title)

    f.close()

参考实例:

1.2 修改爬虫的时间间隔

import requests

from bs4 import BeautifulSoup

import time

import random

link = ""

def scrap(link):

    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}

    r = requests.get(link, headers= headers)

    html = r.text

    soup = BeautifulSoup(html, "lxml")

    return soup

soup = scrap(link)

title_list = soup.find_all("h1", class_="post-title")

for eachone in title_list:

    url = eachone.a['href']

    print ('开始爬取这篇博客: ', url)

    soup_article = scrap(url)

    title = soup_article.find("h1", class_="view-title").text.strip()

    print ('这篇博客的标题为: ', title)

    # 设置随机间隔时间比固定时间更好

    sleep_time = random.randint(0,2) random.random()

    print ('开始休息: ', sleep_time, '秒')

    time.sleep(sleep_time) 

开始爬取这篇博客:http://www.santostang.com/2017/10/23/《网络爬虫:从入门到实践》一书勘误/这篇博客的标题为: 《网络爬虫:从入门到实践》一书勘误开始休息: 1.6644877033804484 秒开始爬取这篇博客:http://www.santostang.com/2017/10/22/国内下载anaconda速度慢,请使用清华镜像/这篇博客的标题为: 国内下载Anaconda速度慢,请使用清华镜像开始休息: 2.8280542254727963 秒开始爬取这篇博客:http://www.santostang.com/2017/09/25/4-3-通过-selenium-模拟浏览器抓取/这篇博客的标题为: 4.3 通过 selenium 模拟浏览器抓取开始休息: 2.788619395026986 秒开始爬取这篇博客:http://www.santostang.com/2017/09/25/4-2-解析真实地址抓取/这篇博客的标题为: 4.2 解析真实地址抓取开始休息: 2.362253815376116 秒开始爬取这篇博客:http://www.santostang.com/2017/09/25/4-1-动态抓取的实例/这篇博客的标题为: 4.1 动态抓取的实例开始休息: 1.9255439760441186 秒开始爬取这篇博客:http://www.santostang.com/2017/03/08/hello-python/这篇博客的标题为: Hello Python!开始休息: 2.8575788112949523 秒开始爬取这篇博客:http://www.santostang.com/2017/03/07/echarts学习笔记2-单页面多张图表/这篇博客的标题为: echarts学习笔记(2) — 同一页面多图表开始休息: 1.0635491028925077 秒开始爬取这篇博客:http://www.santostang.com/2017/03/07/echarts学习笔记1-使用模块化单文件引入/这篇博客的标题为: echarts学习笔记(1) — 模块化单文件引入开始休息: 1.7235031567954384 秒开始爬取这篇博客:http://www.santostang.com/2017/03/06/【爬虫二】爬虫的框架和基本议题/这篇博客的标题为: 【爬虫二】爬虫的框架和基本议题开始休息: 2.7328993154699184 秒开始爬取这篇博客:http://www.santostang.com/2017/03/06/【爬虫一】最简单的爬虫,零基础教学/这篇博客的标题为: 【爬虫一】最简单的爬虫,零基础教学开始休息: 1.4555934588401516 秒

参考网址:

车队对应的id为team_id,车辆对应的id为veh_id,在每个车队中,所有车辆对应同一个team_id

$('.strTree li div input:checkbox').click(function () {//问题:如何实现选中车队,对应成员全部选中,并传对应所有成员的member_id,而不是传team_id

                team_id = document.getElementsByName($(this).attr('id1'));    //通过name   获取name='team_id'的子元素        ($(this).attr('id'))为被选中的车队名               
                team = document.getElementById($(this).attr('id')); //通过id获取   获取的是被勾选的车队或者车辆的id              
                if (team.checked) {
                    for (i = 0; i < team_id.length; i  ) {
                        team_id[i].checked = true;
                    }
                } else {
                    for (i = 0; i < team_id.length; i  ) {
                        team_id[i].checked = false;
                    }                  
                }

                //alert(team_id.length);
                var indexs = [];          
                var vehIds = [];         
                $(".strTree li div input:checkbox:checked").each(function (i) {  //由于复选框选中多个,所以循环输出
                    v = document.getElementsByName($(this).attr('id1'));
                    //alert("v的值"   v.length);
                    if (v.length == 0) {
                        //vehIds[i] = $(this).attr('id2')   "|"   $(this).attr('id3');                       
                        indexs[i] = $(this).attr('id2');
                        vehIds[i] = $(this).attr('id3');
                    } 
                    //vehIds[i] = $(this).attr('id');   //attr() 方法设置或返回被选元素的属性值            

                });              
                for (var i = 0; i < indexs.length; i  ) {            //清除vehIds[]中的所有空字符串
                    if (indexs[i] == '' || indexs[i] == null || typeof (indexs[i]) == undefined) {
                        indexs.splice(i, 1);
                        i = i - 1;
                    }
                }
                for (var i = 0; i < vehIds.length; i  ) {            //清除vehIds[]中的所有空字符串
                    if (vehIds[i] == '' || vehIds[i] == null || typeof (vehIds[i]) == undefined) {
                        vehIds.splice(i, 1);
                        i = i - 1;
                    }
                }                                        
                self.vehIds = vehIds;
                self.indexs = indexs;

                var path = 'TeamMap.aspx';
                window.parent.frames['target_right'].location = path;
                Loading(true);
            });

1、首先在TeamTree.aspx.cs文件中

2、具体的复选框选中在js里面去实现,也就是TeamTree.aspx中去实现(选中父则子全选中)

对应代码如下:

http://www.cnblogs.com/Chen-XiaoJun/p/5753911.html

在TeamTree.aspx中,先是把复选框选中的所有元素保存到数组中,界面点击传出的选中的结果,对应实现应该勾选的各结果

调试结果:

选中cqupt1,则对应所有成员car1,car2自动选中,地图上显示车队中的所有车辆位置信息

需要实现的功能:选中父节点对应子节点全选;不选中父节点,对应子节点也不选中

分分快三计划 1

分分快三计划 2

http://www.codeweblog.com/jquery操作复选框-checkbox-的12个小技巧总结/

选中team_id,对应的member_id都选中,并传递member_id,而不传递team_id。而上面的程序直接把id传出

sb_TreeNode.Append("<div class='" strclass "'><input id='" entity.team_id "' type='checkbox' /><span>" entity.team_name "</span></div>");

 

 

分分快三计划 3

解决办法:

 

如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示。

再给该车队每个成员定义一个共同的标签名称team_id,这样car1/car2/car3三个车有个共同的标签team_id :

 

http://blog.csdn.net/kissing7/article/details/8920566

 

http://www.codeweblog.com/jquery操作三大控件-下拉-单选-复选-的方法/

 

 

把team_id从父节点函数中传递到子节点函数中,

 

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 JS Python网络爬虫