我遇到了openpyxl的问题,并从BeautifulSoup编写了多行输出。
当我print (parsed_links)
从BeautifulSoup输出时,它看起来像这样:
Link1
Link2
Link3
Link4
当我使用openpyxl将相同的数据可以正常打印到单元格时, 我只会在单元格中输入最后一行。
Link4
我正在使用以下代码:
current_db.cell(row=2, column=4).value = (parsed_links)
关于如何将整个BeautifulSoup输出Link1,Link2,Link3,Link4写入一个单元格或将每个单元格写入其自己的单元格的任何建议?我知道使用csv可以使用writerow,但是我想在openpyxl中这样做以避免更多依赖。
`#4CHAN THREADS LOG
from selenium import webdriver
import time
import datetime
import openpyxl
from openpyxl.styles import Alignment
import os
from bs4 import BeautifulSoup
import lxml
#XLSX DATABASE MAP
main_db = openpyxl.load_workbook('C:/chanlog/db.xlsx')
current_db = main_db["current"]
#URL MAP
go_to_page = 'https://thebarchive.com/b/page/7'
#START CHROME
browser = webdriver.Chrome("C:\chromedriver.exe")
#GO TO 4CHAN NAVI PAGE LOAD ALL THREADS INTO XLSX
time.sleep(2)
browser.get(go_to_page)
time.sleep(4)
#PARSE THREAD URLS FROM PAGES
pages_soup = BeautifulSoup(browser.page_source, 'lxml')
for mobile_view in pages_soup.find_all(class_='mobile_view'):
for thread_links in mobile_view.find_all('a'):
parsed_thread_links = (thread_links.get('href'))
links = str(parsed_thread_links)
for row, text in enumerate(links.split('\n'), start=2):
current_db.cell(row=row, column=4).value = text
main_db.save('C:/chanlog/db.xlsx')
print(parsed_thread_links)`
答案 0 :(得分:0)
以下内容将帮助您入门:
.directive('noSpecialChar', function() {
return {
require: 'ngModel',
restrict: 'A',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function(inputValue) {
if (inputValue === undefined)
return ''
regReplace = new RegExp('[^\\w_/\s/g]', 'ig');
if (inputValue === undefined)
return ''
cleanInputValue = inputValue.replace(regReplace, '');
if (cleanInputValue != inputValue) {
modelCtrl.$setViewValue(cleanInputValue);
modelCtrl.$render();
}
return cleanInputValue;
});
}
}
});
对于找到的每个HREF,只需增加行号即可。请注意,不需要chromedriver来获取此信息,如果可以避免使用它,它应该会更快。