无法在 excel 文件中写入新填充的结果(来自反向搜索)
Unable to write newly populated results (derived from reverse search) in an excel file
我在 python 中编写了一个脚本,它能够从 excel 文件中获取 search input
,将其放入我的爬虫中的 input_val
变量中,然后获取与搜索参数匹配的 image link
。当我打印它时,我得到了准确的结果。我正在使用 openpyxl
来读取和写入值。
但是,当我尝试在新 excel 文件中的每个搜索关键字旁边写入填充的结果时,我遇到了困难。
在我当前的 excel 名为 item.xlsx
的文件中有三个搜索关键字(三部电影)。它们是:
Shutter Island
Black Swan
True Grit
如果我 运行 我现有的爬虫没有任何修改,那么新文件中的结果如下所示:
Shutter Island
Black Swan
True Grit
image_link 1
image_link 2
image_link 3
我希望我的抓取工具能够抓取图像链接并将这些链接写入新的 excel 文件中每部电影的旁边。结果输出应如下所示:
Column A Column B
Shutter Island image_link 1
Black Swan image_link 2
True Grit image_link 3
这是我目前尝试过的方法:
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
wb = load_workbook('item.xlsx')
ws = wb['Sheet1']
for row in range(1, ws.max_row + 1):
input_val = ws["A" + str(row)].value #the search keyword holds here
response = requests.get("http://www.boxofficemojo.com/search/?",params = {'q':input_val})
soup = BeautifulSoup(response.text,"lxml")
table = soup.select("table")[1]
for items in table.select('tr')[4:5]:
[elem.extract() for elem in soup.select("script")] #kicking out script from result
data = [img['src'] for img in items.select('td img')]
ws.append(data)
wb.save("new_one.xlsx")
下面我提供了一个示例来说明如何执行此操作。在 B 列中,有一串 url。我还添加了第三列,它利用 excel 中的 HYPERLINK
函数将 A 列的文本和 link 显示到 B 列中所需的 url 提供的文本。
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
wb = load_workbook('item.xlsx')
ws = wb['Sheet1']
for row in range(1, ws.max_row + 1):
input_val = ws["A" + str(row)].value #the search keyword holds here
response = requests.get("http://www.boxofficemojo.com/search/?",params = {'q':input_val})
soup = BeautifulSoup(response.text,"lxml")
table = soup.select("table")[1]
for items in table.select('tr')[4:5]:
[elem.extract() for elem in soup.select("script")] #kicking out script from result
data = [img['src'] for img in items.select('td img')]
if row != 1:
cell_str = data[0]
ws.cell(row=row, column=2).value = '%s' % (cell_str)
ws.cell(row=row, column=3).value = '=HYPERLINK(B%d, A%d)' % (row, row)
else:
ws.cell(row=row, column=2).value = 'Column B'
ws.cell(row=row, column=3).value = 'Hyperlink'
wb.save("new_one.xlsx")
输出:
我在 python 中编写了一个脚本,它能够从 excel 文件中获取 search input
,将其放入我的爬虫中的 input_val
变量中,然后获取与搜索参数匹配的 image link
。当我打印它时,我得到了准确的结果。我正在使用 openpyxl
来读取和写入值。
但是,当我尝试在新 excel 文件中的每个搜索关键字旁边写入填充的结果时,我遇到了困难。
在我当前的 excel 名为 item.xlsx
的文件中有三个搜索关键字(三部电影)。它们是:
Shutter Island
Black Swan
True Grit
如果我 运行 我现有的爬虫没有任何修改,那么新文件中的结果如下所示:
Shutter Island
Black Swan
True Grit
image_link 1
image_link 2
image_link 3
我希望我的抓取工具能够抓取图像链接并将这些链接写入新的 excel 文件中每部电影的旁边。结果输出应如下所示:
Column A Column B
Shutter Island image_link 1
Black Swan image_link 2
True Grit image_link 3
这是我目前尝试过的方法:
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
wb = load_workbook('item.xlsx')
ws = wb['Sheet1']
for row in range(1, ws.max_row + 1):
input_val = ws["A" + str(row)].value #the search keyword holds here
response = requests.get("http://www.boxofficemojo.com/search/?",params = {'q':input_val})
soup = BeautifulSoup(response.text,"lxml")
table = soup.select("table")[1]
for items in table.select('tr')[4:5]:
[elem.extract() for elem in soup.select("script")] #kicking out script from result
data = [img['src'] for img in items.select('td img')]
ws.append(data)
wb.save("new_one.xlsx")
下面我提供了一个示例来说明如何执行此操作。在 B 列中,有一串 url。我还添加了第三列,它利用 excel 中的 HYPERLINK
函数将 A 列的文本和 link 显示到 B 列中所需的 url 提供的文本。
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
wb = load_workbook('item.xlsx')
ws = wb['Sheet1']
for row in range(1, ws.max_row + 1):
input_val = ws["A" + str(row)].value #the search keyword holds here
response = requests.get("http://www.boxofficemojo.com/search/?",params = {'q':input_val})
soup = BeautifulSoup(response.text,"lxml")
table = soup.select("table")[1]
for items in table.select('tr')[4:5]:
[elem.extract() for elem in soup.select("script")] #kicking out script from result
data = [img['src'] for img in items.select('td img')]
if row != 1:
cell_str = data[0]
ws.cell(row=row, column=2).value = '%s' % (cell_str)
ws.cell(row=row, column=3).value = '=HYPERLINK(B%d, A%d)' % (row, row)
else:
ws.cell(row=row, column=2).value = 'Column B'
ws.cell(row=row, column=3).value = 'Hyperlink'
wb.save("new_one.xlsx")
输出: