无法在excel fi中写入新填充的结果(源自反向搜索)

2024-06-17 11:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一个脚本,它可以从excel文件中获取search input,将它放入scraper中的input_val变量中,并获取与搜索参数匹配的image link。当我打印出来的时候,我得到了准确的结果。我用openpyxl来读写这些值。你知道吗

然而,当我试图在一个新的excel文件中的每个搜索关键字旁边写填充的结果时,我被卡住了。你知道吗

在我当前的excel文件item.xlsx中有三个搜索关键字(三部电影)。它们是:

Shutter Island 
Black Swan
True Grit

如果我运行现有的scraper而不做任何修改,那么新文件中的结果如下所示:

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")

Tags: 文件inimageforinputsearchwslink
1条回答
网友
1楼 · 发布于 2024-06-17 11:52:30

下面我提供了一个例子来说明如何做到这一点。在B列中,有一个url字符串。我还添加了第三列,它利用excel中的HYPERLINK函数来显示a列的文本,并链接到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")

输出: Excel Output

相关问题 更多 >