迭代嵌套列表以附加网络抓取结果

如何解决迭代嵌套列表以附加网络抓取结果

我正在尝试遍历列表“company”,对它们的每个元素启动谷歌搜索,抓取结果,并将谷歌结果附加到每个元素。

公司变量就是这样,由 895 个列表组成

company = [['24/7 CUSTOMER Private Limited'],['3 K TECHNOLOGIES Limited'],['3I INFOTECH B P O Limited'],['3I INFOTECH CONSULTANCY SERVICES Limited'],['3I INFOTECH Limited'],['4D CORPORATION Private Limited'],['8K MILES SOFTWARE SERVICES Limited'],['A B P Private Limited']...]]

我希望输出

[['24/7 CUSTOMER Private Limited',New Dehli India],['3 K TECHNOLOGIES Limited',Palo Alto United States],['3I INFOTECH B P O Limited',['3I INFOTECH CONSULTANCY SERVICES Limited',New York United States],['3I INFOTECH Limited',['4D CORPORATION Private Limited',Mumbai India],['8K MILES SOFTWARE SERVICES Limited',New Dehli India ],['A B P Private Limited',New Dehli India]...]]

这是一个以公司名称为参数输出抓取结果的函数

def scrape(row):
        
    query = "https://www.google.com/search?q="+ row + " headquarters"
    r = requests.get(query)   
    html_doc = r.text
    soup = BeautifulSoup(html_doc,'html.parser')
    cleanr = re.compile('<.*?>')
    snippett = re.sub(cleanr,'',str(soup.find_all('div',attrs={'class':'BNeawe s3v9rd AP7Wnd'})[0]))
    
    return snippett

然后通过遍历公司列表并附加结果来调用函数

for lst in company():
    for row in lst():    
        hq_result = scrape(row)
        row.append(hq_result)

出现这个错误IndexError: list index out of range

解决方法

两件事:

  1. 如果您只想获取 rollups 的第一个元素(索引 0),只需使用 <div class="BNeawe s3v9rd AP7Wnd"> 代替 .find(),因为它只会返回第一个节点。
  2. 无需使用正则表达式来获取文本/内容。只需使用 f.ind_all()
  3. 的 BeautfulSoup 方法
  4. .text 的类属性似乎是动态的。它可能不会出现在您对谷歌搜索进行的每个查询中。要么将其更改为动态(相应调整),要么使用 google api 获取搜索结果。
  5. 我的最后一点(也是最重要的一点)是 google 足够复杂,可以识别自动流程/机器人抓取。所以你最终可能会得到
  6. 的回应

BNeawe s3v9rd AP7Wnd

所以还是建议找api的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?