利用python爬虫,提取C:/Users/test/Desktop/DIDItest文件夹下多个文件内的html文件源代码,并提取源代码中的ID、时间、发送号码、接收号码、发送内容,如果发送内容为音频则提取音频所在位置,反之则保留发送内容,并将爬取的内容写入csv中 网页内源代码如下: <html> <meta http-equiv="Content=-Type" content="text/html; charset=utf-8"> <head> <link href="http://192.167.1.101/hint.css" rel="stylesheet"></link> </head> <body>[talkid:138031361]2014年4月20日 03:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">232323</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> [talkid:138031362]2014年4月20日 04:45:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">123456</span> 发送 音频 :[<ahref="files/f/f123fsasfsfsjdfrhf_n.m4a"]>音频</a> <p> ()</p> [talkid:138031363]2014年4月20日 04:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">123456</span> 发送 音频 :[<ahref="files/f/f123fsasfsfsjdfrhf_n.jpg"]>图片</a> <p> ()</p> [talkid:138031364]2014年4月20日 05:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">3234221</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> [talkid:138031365]2014年4月20日 06:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">1359075</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> </body> </html>
时间: 2023-08-14 17:58:01 浏览: 31
你可以使用Python的BeautifulSoup库和正则表达式来提取HTML文件中的内容。下面是一个示例代码,可以提取出ID、时间、发送号码、接收号码和发送内容,并将其写入CSV文件中:
```python
import os
import csv
from bs4 import BeautifulSoup
import re
def extract_content(html):
soup = BeautifulSoup(html, 'html.parser')
talk_id = soup.find('body').find_all(text=re.compile(r'\[talkid:(\d+)\]'))
time = soup.find('body').find_all(text=re.compile(r'\d+年\d+月\d+日 \d+:\d+:\d+'))
sender = soup.select('.hint-success')[::2]
receiver = soup.select('.hint-success')[1::2]
content = soup.find_all('p')
extracted_data = []
for i in range(len(talk_id)):
if '音频' in content[i].text:
audio_url = soup.select('a[href^="files/f/"]')[i]['href']
extracted_data.append([talk_id[i], time[i], sender[i].text, receiver[i].text, audio_url])
else:
extracted_data.append([talk_id[i], time[i], sender[i].text, receiver[i].text, content[i].text.strip()])
return extracted_data
def write_to_csv(data, file_path):
with open(file_path, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['ID', '时间', '发送号码', '接收号码', '发送内容'])
writer.writerows(data)
def main():
folder_path = 'C:/Users/test/Desktop/DIDItest'
output_file = 'output.csv'
extracted_data = []
for file_name in os.listdir(folder_path):
if file_name.endswith('.html'):
file_path = os.path.join(folder_path, file_name)
with open(file_path, 'r', encoding='utf-8') as f:
html = f.read()
extracted_data.extend(extract_content(html))
write_to_csv(extracted_data, output_file)
print(f"提取完成,结果已保存到 {output_file}")
if __name__ == '__main__':
main()
```
在上面的代码中,`folder_path` 变量指定了要提取文件的文件夹路径,`output_file` 变量指定了输出的CSV文件名。代码会遍历文件夹下的所有HTML文件,并提取出所需的信息存储在 `extracted_data` 列表中。最后,调用 `write_to_csv` 函数将数据写入CSV文件中。
请确保在运行代码之前安装了 `beautifulsoup4` 和 `lxml` 库,可以使用以下命令进行安装:
```
pip install beautifulsoup4
pip install lxml
```
请根据你的实际情况修改文件夹路径和输出文件名。