Python Scrape Financial Data From iFrame - python

I'm trying to scrape data within the iFrame.
I have tried webdriver in Chrome as well as PhantomJS with no success. There are source links contained within the iframe where I assume its data is being pulled from, however, when using these links an error is generated saying "You can't render widget content without a correct InstanceId parameter."
Is it possible to access this data using python (PhantomJS)?

Go to network tools in your browser and investigate what data go to the server and just scrape via simple requests.

Related

Waiting for page full load using Scrapy framework

I am trying to scrape some data from this website.
For data scraping I'm using Scrapy framework.
I inspected the webpage and found out that the data I want to extract has the following XPath:
//*[#id="weather-widget"]/div[2]/div[1]/div[1]/div[1]/h2
When I scraped the webpage and started looking through its content I found out that the page does not contain an element with the XPath above.
Is it possible to somehow wait for the page to load and extract the values that I need?
You are not finding the data you are looking for because it's loaded from another request. you can either use something like selenium or puppeteer to load the full page, Or you can try to open send the request directly to the api to get the data.
For the site you provided the request that generates the data is something similar to
https://openweathermap.org/data/2.5/weather?id=625665&appid=439d4b804bc8187953eb36d2a8c26a02
you can confirm it by opening DevTools > Network tab and refresh the page to see the request

Unable to scrape dynamic web page

I am trying to scrape the table found https://ark.intel.com/content/www/us/en/ark/search/featurefilter.html?productType=873&1_Filter-Family=595&2_StatusCodeText=4
I tried using BeautifulSoup and Soup is unable to parse the info located inside the "body" tag. I get a null output when I try to parse the table.
How can I workaround this?
This page uses JavaScript to add data but BeautifulSoup/LXML can't run JavaScript - if you turn off javaScrip in browser and load page then you will see what BeautifulSoup/LXML can get.
You may need Selenium to control web browser which can run JavaScript.
Or you can try to use DevTools in Chrome/Firefox (tab Network) to get url usesJavaScript(AJAX/XHR) to download data. And you can try to use this url withrequestsandBeautifulSoup`
I found it uses url:
https://ark.intel.com/libs/apps/intel/support/ark/advancedFilterSearch?productType=873&1_Filter-Family=595&2_StatusCodeText=4&forwardPath=/content/www/us/en/ark/search/featurefilter.html&pageNo=1
I didn't check if requests will need special settings (ie. cookies, headers) to get it.
You can use Puppeteer to 'control' the dynamic web page, and scrape it with BS.
See here : https://github.com/puppeteer/puppeteer/tree/master/examples

How can I get the HTML code of a webpage after JS has been executed?

I'm trying to scrape a JS intensive website and I wanted to do this by loading the page, rendering the JS and then doing the scraping with BeautifulSoup.
I want to do this, if possible, on a RaspberryPi
I've tried using Requests-HTML, which worked fine for a while but couldn't get Python3.7 to run it on the Raspberry, due to memory limitations.
Then i tried using Selenium, with both Geckodriver, which isn't available for arm6 and I don't know how to compile for the Raspberry, and PhantomJS, which i couldn't get to work properly.
You have two options.
Use tool that could mimic browser and render the js parts of the page, like selenium
Examine the page and see which requests to the backend are obtaining the data you need
I would go with the first approach if I need a general purpose tool, that can scrape data from all sorts of pages
And I would go with the second if I need to scrape pages from several sites and be done with it. If you provide some link I can try to help you with this.

What happens when scraping items from a website table using Selenium?

I'm using Selenium to scrape table data from a website. I found that I can easily iterate through the rows to get the information that I need using xcode. Does selenium keep hitting the website every time I search for an object's text by xcode? Or does it download the page first and then search through the objects offline?
If the former is true does is there a way to download the html and iterate offline using Selenium?
Selenium uses a Web Driver, similar to your web browser. Selenium will access/download the web page once, unless you've wrote the code to reload the page.
You can download the web page and access it locally in selenium. For example you could get selenium to access the web page "C:\users\public\Desktop\index.html"

Scrapy: scraping website where targeted items are populated using document.write

I am trying to scrap a website where targeted items are populated using document.write method. How can I get full browser html rendered version of the website in the Scrapy?
You can't do this, as scrapy will not execute the JavaScript code.
What you can do:
Rely on a headless browser like Selenium, which will execute the JavaScript. Afterwards, use XPath (or simple DOM access) like before to query the web page after executing the page.
Understand where the contents come from, and load and parse the source directly instead. Chrome Dev Tools / Firebug might help you with that, have a look at the "Network" panel that shows fetched data.
Especially look for JSON, sometimes also XML.

Categories

Resources