如何解决迭代嵌套列表以附加网络抓取结果
我正在尝试遍历列表“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
解决方法
两件事:
- 如果您只想获取
rollups
的第一个元素(索引 0),只需使用<div class="BNeawe s3v9rd AP7Wnd">
代替.find()
,因为它只会返回第一个节点。 - 无需使用正则表达式来获取文本/内容。只需使用
f.ind_all()
的 BeautfulSoup 方法
-
.text
的类属性似乎是动态的。它可能不会出现在您对谷歌搜索进行的每个查询中。要么将其更改为动态(相应调整),要么使用 google api 获取搜索结果。 - 我的最后一点(也是最重要的一点)是 google 足够复杂,可以识别自动流程/机器人抓取。所以你最终可能会得到 的回应
BNeawe s3v9rd AP7Wnd
所以还是建议找api的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。