Openpyxl没有将BeautifulSoup的多行输出写入单元格

时间:2018-08-13 13:19:03

标签: python beautifulsoup openpyxl

我遇到了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)`

1 个答案:

答案 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来获取此信息,如果可以避免使用它,它应该会更快。

Excel screenshot