启动My Scraper后,我没有得到输出

时间:2018-03-05 21:50:10

标签: python selenium selenium-webdriver web-scraping beautifulsoup

我正在运行一个刮刀来检索产品名称,Cat No,Size和Price但是当我运行脚本时它不会给我输出或错误消息。我正在使用Jupyter Notebook而不确定这是不是问题。我也不确定是否因为我将其归结为CSV文件,如果这也给它带来问题。任何帮助将不胜感激。

这是我正在运行的代码。

from selenium import webdriver
import csv, os
from bs4 import BeautifulSoup

os.chdir(r'C:\Users\kevin.cragin\AppData\Local\pip\Cache\wheels\09\14\7d\1dcfcf0fa23dbb52fc459e5ce620000e7dca7aebd9300228fe') 
driver = webdriver.Chrome()
driver.get('https://www.biolegend.com/en-us/advanced-search?GroupID=&PageNum=1')
html = driver.page_source

containers = html.find_all('li', {'class': 'row list'})

with open("BioLegend_Crawl.csv", "w") as f:

    f.write("Product_name, CatNo, Size, Price\n")

    for container in containers:

        product_name = container.find('a',{'itemprop':'name'}).text
        info = container.find_all('div',{'class':'col-xs-2 noPadding'})
        catNo = info[0].text.strip()
        size = info[1].text.strip()
        price = info[2].text.strip()

        print('Product_name: '+ product_name)
        print('CatNo: ' + catNo)
        print('Size: ' + size)
        print('Price: ' + price + '\n')

        f.write(','.join([product_name,catNo,size,price]))

1 个答案:

答案 0 :(得分:0)

您使用的网站在技术上是从数据库加载信息,因此默认情况下,网站HTML中没有预设哪些产品名称已加载。必须根据搜索约束动态加载它们。

因此,您需要下载chromedriver.exe(如果您使用谷歌浏览器)或其他一些自动化您的网络浏览器的驱动程序(PhantomJS是另一个好的驱动程序),那么您需要指定机器上的路径位置到哪里这个.exe就像这样生活:

import selenium import webdriver
import csv, os
from bs4 import BeautifulSoup

os.chdir('Path to chromedriver or other driver') 
driver = webdriver.Chrome()
driver.get('Link to your webpage you want to extract HTML from')
html = driver.page_source
soup = BeautifulSoup(html)

containers = soup.find_all('ul',{'id':'productsHolder'})

with open("BioLegend_Crawl.csv", "w") as f:

    f.write("Product_name, CatNo, Size, Price\n")

    for container in containers:

        product_name = container.find('a',{'itemprop':'name'}).text
        info = container.find_all('div',{'class':'col-xs-2 noPadding'})
        catNo = info[0].text.strip()
        size = info[1].text.strip()
        price = info[2].text.strip()

        print('Product_name: '+ product_name)
        print('CatNo: ' + catNo)
        print('Size: ' + size)
        print('Price: ' + price + '\n')

        f.write(','.join([product_name,catNo,size,price]))