【问题标题】:My script keeps on printing even when nothing is left即使没有任何东西,我的脚本也会继续打印
【发布时间】:2018-07-04 17:20:17
【问题描述】:

我使用openpyxl 在python 中编写了一个脚本,以从Sheet1 获取一些names 及其对应的values,并将它们用作要在url 中传递的参数,以使其成为有效的url。问题是当我运行我的脚本时,即使Sheet1 中只有 5 个 URL,它也会继续打印 URL。到目前为止,我的知识是,我定义max row 的方式是准确的。最大行数如何变为无限?

这是脚本:

import requests
from openpyxl import load_workbook

wb = load_workbook('ReverseSearch.xlsx')
ws = wb['Sheet1']

def search_name(session,query,query1):
    session.headers = {"User-Agent":"Mozilla/5.0"}
    res = session.get(url.format(query,query1))
    print(res.url)

if __name__ == '__main__':
    url = "https://www.yellowpages.com/los-angeles-ca/mip/{}-{}"
    for row in range(2, ws.max_row + 1): #I used row 2 cause there are headers in row 1
        key = ws.cell(row=row,column=1).value
        key1 = ws.cell(row=row,column=2).value
        session = requests.Session()
        search_name(session,key,key1)

names我用过:

café claude
sears fine food
chaat cafe
bean bag coffee house
primo patio cafe

values我用过:

3392129
473113343
18528177
12192803
641231

我应该只获得 5 个链接(完全合格),但是当没有剩余参数时,我会得到空白网址。

https://www.yellowpages.com/san-francisco-ca/mip/cafe-claude-3392129?lid=3392129
https://www.yellowpages.com/san-francisco-ca/mip/sears-fine-food-473113343?lid=473113343
https://www.yellowpages.com/san-francisco-ca/mip/chaat-cafe-18528177?lid=18528177
https://www.yellowpages.com/san-francisco-ca/mip/bean-bag-coffee-house-12192803?lid=12192803
https://www.yellowpages.com/san-francisco-ca/mip/primo-patio-cafe-641231?lid=641231
https://www.yellowpages.com/los-angeles-ca/mip/None-None
https://www.yellowpages.com/los-angeles-ca/mip/None-None
https://www.yellowpages.com/los-angeles-ca/mip/None-None 

我希望我的脚本在打印 5 个链接时停止。

顺便说一句,网址是这样的:

url = "https://www.yellowpages.com/los-angeles-ca/mip/{}-{}"

【问题讨论】:

    标签: python python-3.x web-scraping openpyxl


    【解决方案1】:

    我会将此作为评论,但我没有足够的代表。

    我的第一个故障排除步骤是检查如果你这样做会得到什么?

    print(ws.max_row)
    

    它会打印 7 吗?

    如果它打印一个更大的数字,它可能会计算文档中的空行,在这种情况下,您需要检查单元格的内容以打破循环

    【讨论】:

    • 这是你的问题,要么你找到一种方法来修复你的行数,要么当你点击一个空单元格时打破你的循环
    • 是的,使用这个if query and query1: 条件我可以获得想要的结果。但是,你能告诉我为什么即使它们是空的,我的行数也会这么多吗?
    • 那部分我不确定,可能openpyxl读取excel文件的时候,即使大部分是空的,它也看到了652行。尝试进入您的 Excel 文件,选择所有不需要的行并右键单击删除?
    • 你把我引向了正确的方向。实际上,我手动创建了 .xlsx 工作簿。当我使用 openpyxl 创建工作簿并读取最大行数时,它会为我提供正确的行数。
    • 如果您发现这种奇怪的行为(读错计数),请随时在此处发表评论。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多