<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>知识 on 这里是SwetyCore的博客</title>
        <link>https://swetycore-github-io.vercel.app/categories/%E7%9F%A5%E8%AF%86/</link>
        <description>Recent content in 知识 on 这里是SwetyCore的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 26 Mar 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://swetycore-github-io.vercel.app/categories/%E7%9F%A5%E8%AF%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Python lxml 库的使用</title>
        <link>https://swetycore-github-io.vercel.app/p/python-lxml-%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8/</link>
        <pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate>
        
        <guid>https://swetycore-github-io.vercel.app/p/python-lxml-%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8/</guid>
        <description>&lt;h1 id=&#34;前言&#34;&gt;前言：&lt;/h1&gt;
&lt;p&gt;在开发自动健康打卡的过程中，因为 post 不止提交有当日体温，还带有最近动态等个人信息，最初是用 json 文件来存储信息，但是这样每次信息更新都要重新手动更新 json 文件很不方便，而且只能自己一个人用。&lt;/p&gt;
&lt;h1 id=&#34;用法&#34;&gt;用法：&lt;/h1&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;这里贴上一个我当时看的教程连接：&lt;a class=&#34;link&#34; href=&#34;https://www.w3school.com.cn/xml/index.asp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&amp;gt;点我传送&amp;lt;&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要提取的信息大致分为以下这几类&lt;br&gt;
1.input/number类型：&lt;code&gt;&amp;lt;input id=&amp;quot;ykt&amp;quot; class=&amp;quot;weui_input&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;ykt&amp;quot; placeholder=&amp;quot;请输入学号&amp;quot; value=&amp;quot;1234567890&amp;quot; readonly=&amp;quot;readonly&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;&amp;lt;input class=&amp;quot;weui_input&amp;quot; type=&amp;quot;number&amp;quot; id=&amp;quot;nl&amp;quot; name=&amp;quot;nl&amp;quot; placeholder=&amp;quot;请输入年龄&amp;quot; maxlength=&amp;quot;3&amp;quot; required=&amp;quot;&amp;quot; value=&amp;quot;18&amp;quot;&amp;gt;&lt;/code&gt;&lt;br&gt;
2.radio类型： &lt;code&gt;&amp;lt;input class=&amp;quot;weui-check&amp;quot; name=&amp;quot;xb&amp;quot; type=&amp;quot;radio&amp;quot; disabled=&amp;quot;disabled&amp;quot; value=&amp;quot;女&amp;quot;&amp;gt;&amp;amp;nbsp;女Female&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;br&gt;
3.select_type：&lt;code&gt;&amp;lt;select id=&amp;quot;qtyc&amp;quot; class=&amp;quot;select_type&amp;quot; name=&amp;quot;qtyc&amp;quot;&amp;gt;&amp;lt;option value=&amp;quot;&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;无&amp;quot;&amp;gt;无 None&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;不发烧但咳嗽&amp;quot;&amp;gt;不发烧但咳嗽 No fever but cough&amp;lt;/option&amp;gt;&amp;lt;option value=&amp;quot;不发烧但腹泻&amp;quot;&amp;gt;不发烧但腹泻 No fever but diarrhea&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;解决方案&lt;br&gt;
1.导入 lxml&lt;br&gt;
&lt;code&gt;from lxml import etree&lt;/code&gt;&lt;br&gt;
2.利用 etree.HTML，将字符串解析为 HTML 文档
&lt;code&gt;html = etree.HTML(text)&lt;/code&gt;&lt;br&gt;
3.xpath 匹配
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;result=html.xpath(&amp;#39;//input[@type=&amp;#34;text&amp;#34;]&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;html.xpath(&amp;#39;//input[@type=&amp;#34;number&amp;#34;]&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;html.xpath(&amp;#39;//input[@type=&amp;#34;radio&amp;#34; and @checked=&amp;#34;checked&amp;#34;]&amp;#39;) # 多个属性匹配（类型是radio并且被选中）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 上面几个返回的是所有匹配到的结果【list】可以用for遍历。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;for i in result:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    key = i.xpath(&amp;#39;./@name&amp;#39;)[0]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    value = i.xpath(&amp;#39;./@value&amp;#39;)[0]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这样就获取到了表单所需要的key和对应的value。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;下面是select_type的：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;selects = html.xpath(&amp;#39;//select[@class=&amp;#34;select_type&amp;#34;]&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    for select in selects:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option = select.xpath(&amp;#39;./option[@selected=&amp;#34;true&amp;#34;]&amp;#39;)[0]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        key = option.xpath(&amp;#39;../@name&amp;#39;)[0]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        value = option.xpath(&amp;#39;./@value&amp;#39;)[0]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至此，自动提取已经填过的表单项目的任务已经完成。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
