Openpyxl 没有将 BeautifulSoup 的多行输出写入单元格
Openpyxl not writing a multiline output from BeautifulSoup to cell
我在使用 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)`
以下应该有助于您前进:
import requests
import openpyxl
from bs4 import BeautifulSoup
wb = openpyxl.Workbook()
ws = wb.active
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get('https://thebarchive.com/b/page/7', headers=headers)
pages_soup = BeautifulSoup(r.text, 'lxml')
row = 2
for mobile_view in pages_soup.find_all(class_='mobile_view'):
for thread_link in mobile_view.find_all('a', href=True):
ws.cell(row=row, column=4).value = thread_link['href']
row += 1
wb.save('db.xlsx')
对于找到的每个 HREF,只需增加行号。请注意,获取此信息不需要 chromedriver,如果可以避免使用它应该会快很多。
我在使用 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)`
以下应该有助于您前进:
import requests
import openpyxl
from bs4 import BeautifulSoup
wb = openpyxl.Workbook()
ws = wb.active
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get('https://thebarchive.com/b/page/7', headers=headers)
pages_soup = BeautifulSoup(r.text, 'lxml')
row = 2
for mobile_view in pages_soup.find_all(class_='mobile_view'):
for thread_link in mobile_view.find_all('a', href=True):
ws.cell(row=row, column=4).value = thread_link['href']
row += 1
wb.save('db.xlsx')
对于找到的每个 HREF,只需增加行号。请注意,获取此信息不需要 chromedriver,如果可以避免使用它应该会快很多。