我试图在此页面的第一列(https://www.proxynova.com/proxy-server-list/country-fr/)中提取代理IP号码,只是例如:" 178.33.62.155"但是当我尝试提取相关标签上的所有文本内容时,它并没有获得Ip文本。
网站上的html标签是:
<td align="left"><script>document.write('23178.3'.substr(2) + '3.62.155');</script>178.33.62.155</td>
然后我相信当我打印文本内容时,上面的标签脚本(标签内部的标签脚本)应该出现,但是它没有,按照下面的代码我到目前为止已经完成了唯一的信息不会出现的是IP号码。
在提取此标记的所有文本内容时,有关如何提取此特定Ip信息及其出现原因的任何想法吗?
from lxml import html
import requests
import re
page = requests.get('https://www.proxynova.com/proxy-server-list/country-fr/')
tree = html.fromstring(page.content.decode('utf-8'))
for elem in tree.xpath('//table[@class="table"]//tbody//td[@align="left"]'):
print elem.text_content()
答案 0 :(得分:1)
我建议使用BeautifulSoup。像这样。
import requests
import re
from bs4 import BeautifulSoup
res = requests.get('https://www.proxynova.com/proxy-server-list/country-fr/')
soup = BeautifulSoup(res.content, "lxml")
REGEX_JS = re.compile("^document\.write\('([^']+)'\.substr\(2\) \+ '([^']+)'\);$")
proxy_ip_list = []
for table in soup.find_all("table", id="tbl_proxy_list"):
for script in table.find_all("script"):
m = REGEX_JS.search(script.text)
if m:
proxy_ip_list.append(m.group(1)[2:] + m.group(2))
for ip in proxy_ip_list:
print(ip)
答案 1 :(得分:1)
我承认如果没有说出答案我就不会得到这个,因为我错过了脚本中IP地址的编码方式。
import re
import requests
from lxml import etree
page = requests.get('https://www.proxynova.com/proxy-server-list/country-fr/').text
parser = etree.HTMLParser()
tree = etree.fromstring(page, parser=parser)
table = tree.xpath('.//table[@id="tbl_proxy_list"]//script/text()')
for item in table:
m = re.match(r"document.write\('23([0-9.]+)'[^']+'([0-9.]+)'",item)
if m:
print (''.join(m.groups()))