这是来自here
的后续问题使用Racialz答案我可以使用正则表达式循环所有内容,但只有最后一行数据存储在数据库中我如何存储所有数据而不是仅存储最后一个数据
for thisMatch in re.findall(r"<td>(.+?)</td>.+?<td>(.+?)</td>.+?<td>(.+?)</td>.+?<td>(.+?)</td>", match3, re.DOTALL):
print(thisMatch[0], thisMatch[1], thisMatch[2])
sinfo = scrapyitem(name=thisMatch[0], hp=thisMatch[1], email=thisMatch[2])
try:
sinfo().save
修改
match2和match只是正则表达式,以缩小搜索数据的范围。(我知道它可能是多余的,有些人可能会要求我使用解析器)
my_string = str(i)
match = re.search("\<!-- populate table from mysql database -->(.*?)\ /tbody>" , my_string).group(1)
match2 = re.findall('\<div class = "info">(.*?)</tr>' , match)
match3 = str(match2)
数据:
<div class = "info">
<div class="name"><td>random</td></div>
<div class="hp"><td>123456</td></div>
<div class="email"><td>random@mail.com</td></div>
</div>
<div class = "info">
<div class="name"><td>random123</td></div>
<div class="hp"><td>654321</td></div>
<div class="email"><td>random123@mail.com</td></div>
</div>
保存到数据库中的信息只有:
random123
654321
random123@mail.com
match3给了我:
<div class="name"><td>random</td></div>
<div class="hp"><td>123456</td></div>
<div class="email"><td>random@mail.com</td></div>
<div class="name"><td>random123</td></div>
<div class="hp"><td>654321</td></div>
<div class="email"><td>random123@mail.com</td></div>
答案 0 :(得分:0)
我认为你需要去阅读re.findall()的python doc:
https://docs.python.org/2/library/re.html
re.findall(pattern,string,flags = 0)返回所有非重叠 字符串中的模式匹配,作为字符串列表。字符串是 从左到右扫描,并按找到的顺序返回匹配。如果 模式中存在一个或多个组,返回列表 组;如果模式有多个,这将是一个元组列表 组。结果中包含空匹配,除非他们触摸了 另一场比赛的开始。
因此,在您的代码中,您将遍历从re.findall()返回的列表中的所有匹配项,但是除了列表中的最后一个集之外,您不会将各个数据集存储在任何位置。因此,您可能需要对每个集进行保存或传入列表以保存在后端数据库中。
试试这个:
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
connect(&loop, &QEventLoop::destroyed, [=] {
connect(myButton, &QPushButton::released, this, &MyMainWindow::buttonReleased);
});
loop.exec();
谢谢,
-Abe。