python3 获取title的编写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 获取title的编写相关的知识,希望对你有一定的参考价值。

参考技术A

水平有限,不会造轮子,只为学习。

在原来写端口扫描的基础上进一步爬取web服务的title信息,方便收集信息。
适用于在外网收集资产形成IP字典后去批量获取title,意在最快地寻找脆弱点。
自行安装BeautifulSoup4、requests库。
V1.0
python3 写的单线程爬取web系统的title信息。
注解
1.使用BeautifulSoup4库来解析html,爬取title信息;
2.打印title时,带有颜色的输出;
3.在开放443、4433、8443端口时,采用https进行访问;
4.解决SSL认证问题;

V1.0.1
python3 单线程写的爬取网站title信息。增加了OptionParser模块,运行时看起来比较舒服。
注解
1.依然是从IP字典里爬取,实际运行脚本时,即使没有获取title,也应该手动访问开放的端口,往往有意外惊喜;
2.端口内置在脚本里,可自行修改;

V1.1
python3写的多线程爬取web系统的title。
注解
1.只是使用threading模块,没有添加到队列,也没有加锁;本身port_list也不多;

V1.2
python3 写的多线程加队列的来爬取web系统的title信息。
注解
1.增加了queue队列,和多线程配合使用。更加实用;

V1.3
python3 写的多线程加队列的来爬取web系统的title信息。
增加result输出结果到文本,适应于内外网端口扫描并获取title

python3 编写扫描IP网段如192.168.1.0/24某些指定应用端口爬取title信息。 在代理进行内网渗透时内网资产不容易找到。
适用于内网、外网环境。
自行安装BeautifulSoup4、requests库。
V2.0
python3写的扫描IP段并爬取title信息,收集资产。
注解
1.使用ipaddress模块获取C段地址,也可以是B段;
2.只使用threading模块,没有添加队列queue;

V2.1
python3 写的多线程扫描IP段爬取title。在一定线程下,代理探测内网资产title的非常使用。
注解
1.port_list列表移动到scan方法里;
2.将IP添加到queue队列,而不是端口;

V2.2
python3 写的多线程扫描IP段爬取title。
注解
1.只是增加了result_out方法,将结果输出到指定文件;

https://github.com/aedoo/WebServiceScanner/blob/master/webservicescanner.py

如何使用python和beautifulsoup获取title属性?

【中文标题】如何使用python和beautifulsoup获取title属性?【英文标题】:How to obtain title attribute using python and beautifulsoup? 【发布时间】:2017-08-17 18:18:06 【问题描述】:

假设如下:

<td title="I want this title" role="gridcell"><a onclick="open" href="#">TEXT</a></td>

现在,我已经成功地分别找到了表格和各个行:

for rows in soup.find_all(['tr']):
    for cells in rows.find_all(['td']):

通过打印cells,我可以看到我找到了正确的行,但我真的不确定如何获取标题属性并将其保存为字符串?我尝试使用temp = soup.find('td')['title'],但这样做时出错,所以显然我做错了什么。

任何建议将不胜感激!

【问题讨论】:

【参考方案1】:
soup = BeautifulSoup(html_data, 'html5lib')
tag_object=soup.title
tag_object

【讨论】:

【参考方案2】:

lxml 库通常也很有用,因为它可以使用 xpath 表达式来识别 HTML 结构,从而使代码更紧凑。

在这种情况下,xpath 表达式//td[@title] 要求所有td 元素,但坚持title 属性存在。在 for 循环中,您会看到不需要检查属性是否存在,因为这已经完成了。

>>> from io import StringIO
>>> HTML = StringIO('''\
... <td title="title 1" role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td title="title 2" role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td title="title 3" role="gridcell"><a onclick="open" href="#">TEXT</a></td>''')
>>> parser = etree.HTMLParser()
>>> tree = etree.parse(HTML, parser)
>>> tds = tree.findall('//td[@title]')
>>> tds
[<Element td at 0x7a0888>, <Element td at 0x7a0d08>, <Element td at 0x7ae588>]
>>> for item in tree.findall('//td[@title]'):
...     item.attrib['title']
...     
'title 1'
'title 2'
'title 3'

【讨论】:

嗨,比尔,非常感谢您为此添加了另一种方法。我也一定会试试这个;如果有的话,那么为了学习。非常感谢!【参考方案3】:

要获取元素的属性,您可以将元素视为字典 (reference):

soup.find('tag_name')['attribute_name']

而且,在你的情况下:

for tr in soup.find_all('tr'):
    for td in tr.find_all('td'):
        print(td.get('title', 'No title attribute'))

请注意,我使用.get() 方法来避免在没有title 属性的td 元素上失败。

【讨论】:

以上是关于python3 获取title的编写的主要内容,如果未能解决你的问题,请参考以下文章

python3 - 从异步方法获取结果

连接没有通过 Python3 异步并发 HTTP 获取请求关闭

Python3 爬虫

Python3编写网络爬虫04-爬取猫眼电影排行实例

如何在python3中获取protobuf的RepeatedCompositeContainer或RepeatedScalarContainer包含的类型?

Python3 tkinter基础 TK title 设置窗体的标题