标题Python的下载、安装、运行
- 官方下载地址:https://www.python.org/downloads/ 如果操作系统为Windows,可以直接点黄色按钮下载最新版的Python。如果是其它操作系统,或者想要下载旧版本,点击白色框框里的链接,找到想要的版本下载即可。
- 双击安装包,进入安装界面。可以选择直接安装或自定义安装。记得勾选安装界面底下两个选项,方便日后安装第三方库
- 安装第三方库
【开始】菜单——运行——输入CMD——确定
在打开的窗口中输入【pip install lxml】,回车,等待第三方库安装成功
恭喜,你已经成功安装了Python,并且安装了接下来要用到的第三方库lxml,还学会了安装第三方库的方法。下面我们开始搜索并提取信息吧
搜索与信息提取
- 在谷歌上搜索一个关键词。为了一次性获取更多结果,我把搜索结果数量设置为100个
- 结果页空白处右击——查看源文件——复制全文【Ctrl+A】——粘贴到txt文件,保存为【html.txt】
- 在【开始】菜单找到IDLE,单击打开
- 新建一个py文件。在菜单栏依次点击File——New File,或者使用快捷键【Ctrl+N】
- 把以下代码粘贴到新文件里,然后按快捷键【Ctrl+S】保存,文件名为【test.py】
from lxml import etree
def collect_domains():
html = open("html.txt", 'rb').read()
html = etree.HTML(html)
path = '//*[@id="rso"]/div[*]/div/div/div[1]/a/div/cite'
elements = html.xpath(path)
urls = [element.text for element in elements]
rows = ""
for url in urls:
domain = url.split("/")[-1]
if domain.startswith("www."): domain = domain[4:]
rows = rows + f"{url}\t{domain}\n"
open("结果.txt","w").write(rows)
collect_domains()
- 把【test.py】和【html.txt】放在同一个文件夹下,如【文件夹1】,双击运行【test.py】
- 在【文件夹1】下出现一个【结果.txt】,里面储存着提取到的所有url和域名。可以把结果复制到Excel或WPS表格中,作进一步的处理。
无代码版本(免安装)
如果你不想安装Python,不想写代码,也可以用这个封装好的【信息提取】程序
完整代码
from lxml import etree
import os, time
from tkinter import *
from tkinter import ttk
def get_only(old_list):
L = []
for row in old_list:
if row not in L:
L.append(row)
return L #new_list
def collect_domains(filename, path, content, only):
html = open(filename, 'rb').read()
html = etree.HTML(html)
elements = html.xpath(path)
urls = [element.text for element in elements]
domains = [url.split("/")[-1] for url in urls]
domains = [domain[4:] if domain.startswith("www.") else domain for domain in domains]
if content == "仅网址": rows = urls
elif content == "仅域名": rows = domains
elif content == "网址+域名": rows = [f"{urls[i]}\t{domains[i]}" for i in range(len(urls))]
if only == "是": rows = get_only(rows)
open(f"结果{time.strftime('%Y-%m-%d %H-%M-%S')}.txt","w").write("\n".join(rows))
def create_win():
def command1():
filename, path, content, only = [D[key].get() for key in D]
collect_domains(filename, path, content, only)
win = Tk()
win.title("信息收集")
frame = Frame(win)
frame.pack(padx=20, pady=20)
D = {}
texts = ['文件名', 'path', '提取内容', '去重']
for r in range(4):
Label(frame, width=10, text=texts[r]).grid(row=r, column=0)
D[f'{r}1'] = ttk.Combobox(frame, width=40)
D[f'{r}1'].grid(row=r, column=1)
D[f'01']["values"] = [name for name in os.listdir() if name.endswith(".txt") and name.startswith("结果") is False]
D[f'11']["values"] = ['//*[@id="rso"]/div[*]/div/div/div[1]/a/div/cite']
D[f'21']["values"] = ["仅网址", "仅域名", "网址+域名"]
D[f'31']["values"] = ["是", "否"]
Button(win, text="确认", width=15, command=command1).pack(pady=20)
win.mainloop()
create_win()
如果你想要从其它网页收集网址或域名,只需要手动修改路径。分享一种获取路径的简单方法。
- 在Chrome或搜狗浏览器按【F12】调出控制台,进行选择模式,点击需要收集的元素
- 在控制台选中该元素——右键菜单——复制Xpath。
- 复制2个元素的Xpath,粘贴到txt文件中,比较两者差异
- 差异部分(数字)用【*】代替,得到xpath
注意:浏览器控制台给出的xpath有时不准,可能需要自己在源文件中查找识别