给定的网站列表,使用Python搜索和返回信息

时间:2019-03-20 03:42:25

标签: python web-scraping beautifulsoup google-search

我创建了一个函数,该函数返回给定特定公司名称的URL列表。我想知道通过此URL列表进行搜索并查找有关该公司是否为另一公司所有的信息。

示例:Adobe公司收购了“ Marketo”公司。

我想返回某个公司是否被收购以及被谁收购。

这是我到目前为止所拥有的:

import requests
from googlesearch import search
from bs4 import BeautifulSoup as BS


def get_url(company_name):
    url_list = []
    for url in search(company_name, stop=10):
        url_list.append(url)
    return url_list


test1 = get_url('Marketo')
print(test1[7])


r = requests.get(test1[7])
html = r.text
soup = BS(html, 'lxml')
stuff = soup.find_all('a')


print(stuff)

我是Web抓取的新手,我不知道如何真正地搜索每个URL(假设可以)并找到所需的信息。

test1的值是以下列表:

['https://www.marketo.com/', 'https://www.marketo.com/software/marketing-automation/', 'https://blog.marketo.com/', 'https://www.marketo.com/software/', 'https://www.marketo.com/company/', 'https://www.marketo.com/solutions/pricing/', 'https://www.marketo.com/solutions/', 'https://en.wikipedia.org/wiki/Marketo', 'https://www.linkedin.com/company/marketo', 'https://www.cmswire.com/digital-marketing/what-is-marketo-a-marketers-guide/']

3 个答案:

答案 0 :(得分:1)

您可以从Crunchbase等网站找到该信息。

获取它的步骤如下:

  1. 构建包含目标公司信息的URL。假设您找到包含所需信息的网址,例如:

    url = 'https://www.example.com/infoaboutmycompany.html'

  2. 使用硒来获取html,因为该站点不允许您直接刮取页面。像这样:

    from selenium import webdriver from bs4 import BeautifulSoup driver = webdriver.Firefox() driver.get(url) html = driver.page_source

  3. 使用BeautifulSoup从div中获取包含该信息的文本。它有一个特定的类,您可以轻松地查看html:

    bsobj = BeautifulSoup(html, 'lxml') res = bsobj.find('div', {'class':'alpha beta gamma'}) res.text.strip()

少于10行代码即可获取。

当然,它可以更改您的列表,从URL列表到公司列表,希望该站点可以考虑。对于marketo来说有效。

答案 1 :(得分:1)

  

我想返回某个公司是否被收购以及被谁收购

您可以抓取crunchbase网站以获取此信息。缺点是您将搜索限制在他们的网站上。要扩展此范围,您可能还可以包括其他一些站点。

import requests
from bs4 import BeautifulSoup
import re
while True:
    print()
    organization_name=input('Enter organization_name: ').strip().lower()
    crunchbase_url='https://www.crunchbase.com/organization/'+organization_name
    headers={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }
    r=requests.get(crunchbase_url,headers=headers)
    if r.status_code == 404:
        print('This organization is not available\n')
    else:
        soup=BeautifulSoup(r.text,'html.parser')
        overview_h2=soup.find('h2',text=re.compile('Overview'))
        try:
            possible_acquired_by_span=overview_h2.find_next('span',class_='bigValueItemLabelOrData')
            if possible_acquired_by_span.text.strip() == 'Acquired by':
                acquired_by=possible_acquired_by_span.find_next('span',class_='bigValueItemLabelOrData').text.strip()
            else:
                acquired_by=False
        except Exception as e:
                acquired_by=False
                # uncomment below line if you want to see the error
                # print(e)
        if acquired_by:
            print('Acquired By: '+acquired_by+'\n')
        else:
            print('No acquisition information available\n')

    again=input('Do You Want To Continue? ').strip().lower()
    if  again not in ['y','yes']:
        break

样本输出:

Enter organization_name: Marketo
Acquired By: Adobe Systems

Do You Want To Continue? y

Enter organization_name: Facebook
No acquisition information available

Do You Want To Continue? y

Enter organization_name: FakeCompany
This organization is not available

Do You Want To Continue? n

注释

  • 在将其部署到任何商业项目之前,请阅读crunchbase Terms并征得他们的同意。

  • 也请检出crunchbase api-我认为这将是您提出要求的合法方法。

答案 2 :(得分:1)

如其他答案所述, crunchbase 是获取此类信息的好地方,但是您将需要一个无头的浏览器来消除关键信息 例如


如果您正在使用ubuntu,则安装Selenium非常容易。 Selenium需要驱动程序才能与所选浏览器交互。例如,Firefox需要使用geckodriver

  • pip安装硒
  • sudo pip3安装硒--upgrade

安装最新版本的geckodriver

将驱动程序添加到PATH中,以便其他工具可以找到它,或者在所有软件都安装到的目录中找到该驱动程序,否则会引发错误(“ geckodriver”可执行文件必须位于PATH中)

  • mv壁虎驱动程序/ usr / bin /

代码


from bs4 import BeautifulSoup as BS
from selenium import webdriver


baseurl = "https://www.crunchbase.com/organization/{0}"

query = input('type company name : ').strip().lower()
url = baseurl.format(query)

driver = webdriver.Firefox()
driver.get(url)
html = driver.page_source
soup = BS(html, 'lxml')
acquiredBy = soup.find('div', class_= 'flex-no-grow cb-overflow-ellipsis identifier-label').text


print(acquiredBy)

您还可以使用相同的逻辑来获取其他信息,只需检查类/ id并废弃信息即可。