News Scraping: Everything You Need to Know
Tags: webdev, javascript, programming, beginners
Published: 2023-01-03 14:30:29


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0yrp5ogkdedl2z5itia8.png)<p class="c0"><span class="c5">Public news data can be beneficial for various companies to stay ahead of their competition. However, for companies whose core business isn&rsquo;t news aggregation or analysis, reading and analyzing articles from thousands of news outlets worldwide is bound to take a lot of unnecessary time, regardless of the articles&rsquo; importance. Fortunately, news scraping addresses this problem. </span></p><p class="c0"><span class="c5">In this post, we talk about everything you need to know about news scraping, including its benefits and use cases as well as how you can use Python to create an article scraper. </span></p><p class="c0"><span class="c5">After you&rsquo;re done reading, don&rsquo;t forget to leave a comment below with any questions, suggestions, or impressions you might have. </span></p><h2 class="c28 c27" id="h.cdu9nncf90fv"><span class="c17">What is news scraping?</span></h2><p class="c0"><span class="c19">News scraping is a subset of web scraping that mainly targets public </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/blog/media-monitoring&amp;sa=D&amp;source=editors&amp;ust=1672758784660736&amp;usg=AOvVaw1iTM1D9_eUMfU34Qwbz5MZ">online media</a></span><span class="c5">&nbsp;websites. It refers to automatically extracting news updates and releases from news articles and websites. It also relates to extracting public news data from the news results tab on SERPs or dedicated news aggregator platforms. </span></p><p class="c0"><span class="c19">On the other hand, </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/products/scraper-api/web&amp;sa=D&amp;source=editors&amp;ust=1672758784661079&amp;usg=AOvVaw0WwTiOtDH4z10uzc1o68Se">web scraping</a></span><span class="c5">&nbsp;or web data extraction is the automatic retrieval of data from any website.</span></p><p class="c0"><span class="c5">From a business point of view, news websites contain plenty of crucial public data, from reviews about newly released products to coverage of a company&rsquo;s financial results and other vital announcements. These websites also cover several topics and industries, including technology, finance, fashion, science, health, politics, and more.</span></p><h2 class="c28 c27" id="h.suu78xnzz5vy"><span class="c17">Benefits of news scraping</span></h2><p class="c0"><span class="c5">The benefits of news scraping include:</span></p><ul class="c8 lst-kix_2s739wapwb5b-0 start"><li class="c22 li-bullet-0"><span class="c5">Risk identification and mitigation</span></li><li class="c22 li-bullet-0"><span class="c5">Source of up-to-date, reliable, and verified information</span></li><li class="c22 li-bullet-0"><span class="c5">Improves operations</span></li><li class="c22 li-bullet-0"><span class="c5">Improves compliance</span></li></ul><h3 class="c9" id="h.tl2qsyeaoycd"><span class="c14">Risk identification and mitigation</span></h3><p class="c0"><span class="c19">A recent </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://www.mckinsey.com/business-functions/operations/our-insights/risk-resilience-and-rebalancing-in-global-value-chains&amp;sa=D&amp;source=editors&amp;ust=1672758784662010&amp;usg=AOvVaw3r_r3naDJaVh_e6BPIjqz5">McKinsey article</a></span><span class="c5">&nbsp;discussing risk and resilience proposed the use of digital technologies that integrate real-time data from several sources, including weather forecasts, to run scenarios to come up with the most effective solution to a problem. In doing so, the article indirectly recommended using news scraping as a source of real-time public data that can then be used to identify and mitigate risks. </span></p><p class="c0"><span class="c5">Scraping public news websites increases a company&rsquo;s ability to anticipate, predict, and observe threats more accurately and quickly.</span></p><h3 class="c9" id="h.dry1ghiuiehj"><span class="c14">Source of up-to-date, reliable, and verified information</span></h3><p class="c0"><span class="c5">News websites mainly strive to maintain credibility through their coverage of emerging news. They often have fact-checking departments and libraries against which to verify certain aspects of their updates. In this regard, public news scraping provides companies with access to up-to-date, accurate, and reliable information.</span></p><h3 class="c9" id="h.mvynt39np2bb"><span class="c14">Improve operations</span></h3><p class="c0"><span class="c5">Companies don&rsquo;t operate in a vacuum, meaning external factors can easily impact them. In this regard, scraping public news websites is a critical tool that ensures they constantly stay updated on emerging trends. It acts as a platform to make informed improvements to operations in a way that leverages favorable trends or counters unfavorable ones.</span></p><h3 class="c9" id="h.q4a0t1ifseiq"><span class="c14">Improves compliance</span></h3><p class="c0"><span class="c5">News websites cover a wide latitude of topics, including regulations that have already been passed or those still awaiting enactment. Moreover, in some cases, the author of a news article even discusses the implications of such laws on whole industries and even interviews experts for a better picture. </span></p><p class="c0"><span class="c5">Thus, when companies scrape public news articles and gather news regarding proposed or newly enacted regulations, they can better prepare for their implications, thereby improving compliance.</span></p><h2 class="c27 c28" id="h.nl2b9skbl88h"><span class="c17">Use cases of news scraping</span></h2><p class="c0"><span class="c5">News scraping provides access to real-time updates on several issues and topics, which can be used in the following ways:</span></p><ul class="c8 lst-kix_y5w1k2qihvmp-0 start"><li class="c22 li-bullet-0"><span class="c5">Reputation monitoring</span></li><li class="c22 li-bullet-0"><span class="c5">Obtain competitive intelligence</span></li><li class="c22 li-bullet-0"><span class="c5">Discover industry trends </span></li><li class="c22 li-bullet-0"><span class="c5">Unearth fresh ideas</span></li><li class="c22 li-bullet-0"><span class="c5">Content strategy improvement</span></li></ul><h3 class="c9" id="h.xn64rh4nf3v1"><span class="c14">Reputation monitoring</span></h3><p class="c0"><span class="c19">According to a </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://www.webershandwick.com/news/corporate-reputation-2020-everything-matters-now/&amp;sa=D&amp;source=editors&amp;ust=1672758784663653&amp;usg=AOvVaw3UatRgY3X1f8fJxQmYHMrG">2020 Weber Shandwick study</a></span><span class="c5">, companies with strong reputations enjoy customer loyalty, competitive advantage, better relationships with partners and suppliers, the attraction of high-quality talent, high employee retention, new market opportunities, higher stock price, and more. More specifically, 76% of a company&rsquo;s market value is attributed to company reputation. </span></p><p class="c0"><span class="c19">Media coverage may be positive or negative. Although the saying goes that &lsquo;any publicity is good publicity,&rsquo; bad publicity can easily damage people&rsquo;s perception of a company, significantly affecting its reputation. It could tank the market value substantially. Further, with most companies (87%) holding that customers&rsquo; perceptions are the most important to their reputation, it&rsquo;s important to arrest a problem before it develops even further. Online </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/blog/online-reputation-management&amp;sa=D&amp;source=editors&amp;ust=1672758784664049&amp;usg=AOvVaw0P-gipsP8vT64GxsqnepKp">reputation management</a></span><span class="c19">&nbsp;and </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/solutions/review-monitoring&amp;sa=D&amp;source=editors&amp;ust=1672758784664271&amp;usg=AOvVaw16KJHbsreZMpFUV09wsVBr">review monitoring</a></span><span class="c5">&nbsp;are considered crucial processes for every company. </span></p><p class="c0"><span class="c5">News scraping allows companies to monitor every newly published public news article and, therefore, their reputation.</span></p><h3 class="c9" id="h.d8ltkbpxapx5"><span class="c14">Obtain competitive intelligence</span></h3><p class="c0"><span class="c5">The business world is synonymous with competition. This makes avenues of collecting the much-needed competitive intelligence all the more important. </span></p><p class="c0"><span class="c5">Multiple news articles cover topics such as product launches, rebranding initiatives, mergers and acquisitions, financial results, and more. Thus, scraping news websites that cover such business-oriented topics offers insights about competitors. It&rsquo;s a convenient way of obtaining competitive intelligence.</span></p><h3 class="c9" id="h.92ydhpey33dw"><span class="c14">Discover industry trends</span></h3><p class="c0"><span class="c5">Many factors and impactful events could impact a company&rsquo;s operations. As such, businesses must develop a mechanism that enables them to monitor trends and emerging issues. </span></p><p class="c0"><span class="c5">Public news articles are a perfect place to start. They contain information that highlights where a particular industry is headed. For instance, articles summarizing market research reports offer insights into the current status of the industry and factors that are likely to promote growth throughout the forecast period. By web scraping all the public news articles containing such information, companies can discover new industry trends that, in turn, enhance competitiveness.</span></p><p class="c0"><span class="c5">Additionally, by web scraping articles containing news data about their competitors, businesses can easily establish operational similarities, which automatically point to the industry trends.</span></p><h3 class="c9" id="h.gh8h0s51jbk3"><span class="c14">Unearth fresh ideas</span></h3><p class="c0"><span class="c5">News websites publish insightful articles that contain input from industry experts or that are authored by acclaimed figures in their respective fields. For companies, such posts can be a source of ideas regarding new opportunities. They can also contain pointers on how to leverage such opportunities. Such articles can help businesses augment their ideation process. </span></p><p class="c0"><span class="c5">Scraping public news websites provides a reliable way to automatically access these vital resources and, therefore, unearth fresh ideas.</span></p><h3 class="c9" id="h.z89t0mbj9rzy"><span class="c14">Content strategy improvement</span></h3><p class="c0"><span class="c5">News websites aren&rsquo;t limited only to conventional media outlets but also include newswire sites and public relations (PR) websites that distribute press releases and provide regular article-based coverage of client companies. </span></p><p class="c0"><span class="c5">In this regard, companies can gain insights into how they can improve their communication and content strategy using news scraping. Simply put, this process highlights the best industry practices and what can make a company&rsquo;s PR stand distinct.</span></p><h2 class="c28 c27" id="h.bcpfgq8fcpxo"><span class="c17">How to scrape news data?</span></h2><p class="c0"><span class="c19">When it comes to public news scraping, </span><span class="c3"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/blog/python-web-scraping&amp;sa=D&amp;source=editors&amp;ust=1672758784665768&amp;usg=AOvVaw1YkaAUYMdEt5kjBoeZv0Id">Python</a></span><span class="c5">&nbsp;offers one of the easiest ways to get started, especially given that it is an object-oriented language. Basically, scraping public news data involves two steps &ndash; downloading the webpage and parsing the HTML. </span></p><p class="c0"><span class="c19">One of the most popular libraries to download web pages is Requests. This library can be installed using the </span><span class="c20">pip</span><span class="c19">&nbsp;command on Windows. On Mac and Linux, we suggest using the </span><span class="c20">pip3</span><span class="c5">&nbsp;command to ensure that you&rsquo;re using Python3. So, you should open the terminal and run the following command:</span></p><a id="t.f48a1af4ed5588ce05f9f8d09892e13e754f842a"></a><a id="t.0"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">pip3 install requests</span></p></td></tr></table><p class="c0 c25"><span class="c5"></span></p><p class="c0"><span class="c2">Create a new Python file and enter the following code:</span></p><a id="t.08d3fff17400db4dc4ac8f5edf175863170c2c87"></a><a id="t.1"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c26 c13">import</span><span class="c6 c32">&nbsp;requests</span></p><p class="c11"><span class="c6">response </span><span class="c21 c13">=</span><span class="c6">&nbsp;requests</span><span class="c7">.</span><span class="c4">get</span><span class="c7">(</span><span class="c6">https</span><span class="c21 c13">://</span><span class="c6">quotes</span><span class="c7">.</span><span class="c6">toscrape</span><span class="c7">.</span><span class="c6">com&#39;</span><span class="c7">)</span></p><p class="c11"><span class="c4">print</span><span class="c7">(</span><span class="c6">response</span><span class="c7">.</span><span class="c6">status_code</span><span class="c7">)</span></p></td></tr></table><p class="c0 c25"><span class="c2"></span></p><p class="c0"><span class="c10">If you run this code, it will print the HTTP status code. If the web page is successfully downloaded, the status code will be 200. To access the HTML of the web page, access the </span><span class="c20">text</span><span class="c10">&nbsp;attribute of the </span><span class="c20">response</span><span class="c2">&nbsp;object.</span></p><p class="c1"><span class="c2"></span></p><a id="t.f0eed8b109ee4f17fbd860cc0a55587902a40757"></a><a id="t.2"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c4">print</span><span class="c7">(</span><span class="c6">response</span><span class="c7">.</span><span class="c6">text</span><span class="c7">)</span><span class="c6">&nbsp;# Prints the entire </span><span class="c13 c34">HTML</span><span class="c6">&nbsp;</span><span class="c26 c13">of</span><span class="c6">&nbsp;the webpage</span><span class="c7">.</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c10">The HTML returned by </span><span class="c20">response.text</span><span class="c10">&nbsp;is a string. This needs to be parsed into a Python object that can be queried for specific data. There are multiple libraries for parsing available for Python. This example uses the lxml, along with the </span><span class="c3 c13"><a class="c15" href="https://www.google.com/url?q=https://www.crummy.com/software/BeautifulSoup/bs4/doc/&amp;sa=D&amp;source=editors&amp;ust=1672758784669256&amp;usg=AOvVaw04bwMiASFHJ_RyJj8fAiBa">Beautiful Soup</a></span><span class="c2">&nbsp;library. Beautiful Soup works as a wrapper over the parser. This makes extracting data from HTML efficient.</span></p><p class="c0"><span class="c10">To install these libraries, use the </span><span class="c20">pip</span><span class="c2">&nbsp;command. You should open the terminal and enter the following:</span></p><a id="t.105aebb535d5562483de2f7f530d211f2a6c5d85"></a><a id="t.3"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">pip3 install lxml beautifulsoup4</span></p></td></tr></table><p class="c0 c25"><span class="c2"></span></p><p class="c0"><span class="c2">In the code file, import Beautiful Soup and create an object as follows:</span></p><p class="c1"><span class="c2"></span></p><a id="t.74340282f50f97e40473fb11c0f83bc6ebd49338"></a><a id="t.4"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">from bs4 </span><span class="c26 c13">import</span><span class="c6 c32">&nbsp;BeautifulSoup</span></p><p class="c11"><span class="c6">response </span><span class="c21 c13">=</span><span class="c6">&nbsp;requests</span><span class="c7">.</span><span class="c4">get</span><span class="c7">(</span><span class="c24 c13">&#39;https://quotes.toscrape.com&#39;</span><span class="c7">)</span></p><p class="c11"><span class="c6">soup </span><span class="c13 c21">=</span><span class="c6">&nbsp;</span><span class="c4">BeautifulSoup</span><span class="c7">(</span><span class="c6">response</span><span class="c7">.</span><span class="c6">text</span><span class="c7">,</span><span class="c6">&nbsp;</span><span class="c13 c24">&#39;lxml&#39;</span><span class="c7">)</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c10">In this example, we&rsquo;re working with a website with quotes. If you&rsquo;re working with any other site, this method will still work. The only thing that will change is how to locate the element. To locate an HTML element, </span><span class="c20">find()</span><span class="c10">&nbsp;method can be used. This method takes the </span><span class="c20">tag</span><span class="c2">&nbsp;name and returns the first match.</span></p><a id="t.1b8dcb126e268eb8b5eabd2d6f56c0229a9562e1"></a><a id="t.5"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">title </span><span class="c21 c13">=</span><span class="c6">&nbsp;soup</span><span class="c7">.</span><span class="c4">find</span><span class="c7">(</span><span class="c24 c13">&#39;title&#39;</span><span class="c7">)</span></p></td></tr></table><p class="c0 c25"><span class="c2"></span></p><p class="c0"><span class="c10">The text inside this tag can be extracted using the </span><span class="c20">get_text()</span><span class="c2">&nbsp;method.</span></p><p class="c1"><span class="c2"></span></p><a id="t.835bc34bd89750125b9ad5a1f0fb222a793979d8"></a><a id="t.6"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c4">print</span><span class="c7">(</span><span class="c6">title</span><span class="c7">.</span><span class="c4">get_text</span><span class="c7">())</span><span class="c6">&nbsp;# Prints page title</span><span class="c7">.</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c2">To fine-tune it further, other attributes such as class, id, etc. can be used as well.</span></p><p class="c0 c25"><span class="c2"></span></p><a id="t.877d7aaad1873c4ecf3131646e7b2a3df5edea21"></a><a id="t.7"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">soup</span><span class="c7">.</span><span class="c4">find</span><span class="c7">(</span><span class="c24 c13">&#39;small&#39;</span><span class="c7">,</span><span class="c6">itemprop</span><span class="c21 c13">=</span><span class="c24 c13">&quot;author&quot;</span><span class="c7">)</span></p></td></tr></table><p class="c0 c25"><span class="c2"></span></p><p class="c0"><span class="c10">Note that to use the </span><span class="c20">class</span><span class="c10">&nbsp;attribute, you should use the </span><span class="c20">class</span><span class="c10">_ because </span><span class="c20">class</span><span class="c2">&nbsp;is a reserved keyword in Python.</span></p><p class="c1"><span class="c2"></span></p><a id="t.7aa59a58b13428cc1ceb9243899913ce5347a366"></a><a id="t.8"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">soup</span><span class="c7">.</span><span class="c4">find</span><span class="c7">(</span><span class="c24 c13">&#39;small&#39;</span><span class="c7">,</span><span class="c6">class_</span><span class="c21 c13">=</span><span class="c24 c13">&quot;author&quot;</span><span class="c7">)</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c10">Similarly, to get more than one element, the </span><span class="c20">find_all()</span><span class="c2">&nbsp;method can be used. If these quotes are considered as news headlines, you can simply get all the elements in headline using the following statement:</span></p><p class="c1"><span class="c2"></span></p><a id="t.7b0c15716bc1997726049bd40993c8b7e52e39a1"></a><a id="t.9"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c6">headlines </span><span class="c21 c13">=</span><span class="c6">&nbsp;soup</span><span class="c7">.</span><span class="c4">find_all</span><span class="c7">(</span><span class="c6">itemprop</span><span class="c21 c13">=</span><span class="c24 c13">&quot;text&quot;</span><span class="c7">)</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c10">You should note that the object </span><span class="c20">headlines</span><span class="c10">&nbsp;is a list of tags. To extract the text from these tags, a </span><span class="c20">for</span><span class="c2">&nbsp;loop can help you:</span></p><p class="c1"><span class="c2"></span></p><a id="t.92fc65241c74e05f0fef4254a09b8dc420e09d1f"></a><a id="t.10"></a><table class="c18"><tr class="c12"><td class="c30" colspan="1" rowspan="1"><p class="c11"><span class="c26 c13">for</span><span class="c6">&nbsp;headline </span><span class="c13 c26">in</span><span class="c6">&nbsp;</span><span class="c34 c13">headlines</span><span class="c21 c13">:</span></p><p class="c11"><span class="c6">&nbsp; &nbsp; </span><span class="c4">print</span><span class="c7">(</span><span class="c6">headline</span><span class="c7">.</span><span class="c4">get_text</span><span class="c7">())</span></p></td></tr></table><p class="c1"><span class="c2"></span></p><p class="c0"><span class="c10">It&rsquo;s important to mention that scraping public news data isn&rsquo;t very difficult. However, when collecting large amounts of public data, you can face issues such as IP blocks or CAPTCHAs. International news websites also provide their content according to the country. In this case, you should think about using </span><span class="c3 c13"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/products/residential-proxy-pool&amp;sa=D&amp;source=editors&amp;ust=1672758784676358&amp;usg=AOvVaw3HhNgIxZEfHoD9pApalGET">Residential</a></span><span class="c10">&nbsp;or </span><span class="c3 c13"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/products/datacenter-proxies&amp;sa=D&amp;source=editors&amp;ust=1672758784676626&amp;usg=AOvVaw0JSuT9-64Pg3f5-GufBAcq">Datacenter</a></span><span class="c2">&nbsp;proxies.</span></p><h2 class="c28 c27" id="h.vw5tuscvqfj3"><span class="c17">Is it legal to scrape news websites?</span></h2><p class="c0"><span class="c2">Web scraping is one of the least time-consuming methods to access large amounts of the latest public news articles and monitor multiple news websites. In fact, with the increased sophistication of article scrapers, it has become increasingly possible to bypass anti-scraping measures that websites put in place to stop web scraping efforts.</span></p><p class="c0"><span class="c10">The unmatched convenience of news scraping, or web scraping in general, however, doesn&rsquo;t negate the existence of a few legal questions regarding the practice. So, is it legal to scrape news websites or </span><span class="c3 c13"><a class="c15" href="https://www.google.com/url?q=https://oxylabs.io/blog/is-web-scraping-legal&amp;sa=D&amp;source=editors&amp;ust=1672758784677121&amp;usg=AOvVaw3ealAVWZjVtiNWweSycr_5">is web scraping legal</a></span><span class="c2">?</span></p><p class="c0"><span class="c2">Well, as our legal team would say, it depends. Web scraping isn&rsquo;t illegal as such, but it totally depends on the intention behind the practice. As long as web scraping &nbsp;news websites doesn&rsquo;t violate any laws or infringe any intellectual property rights, regarding the data you intend to scrape or the source target, it should be considered as a legal activity. Accordingly, before engaging in any scraping activities, you should get appropriate professional legal advice regarding your specific situation.</span></p><h2 class="c28 c27" id="h.ecurvi3a8r0e"><span class="c17">Conclusion</span></h2><p class="c0"><span class="c2">Web scraping news websites provides a convenient and fast route of extracting real-time, reliable, and accurate data about competitors, the weather, economic environment, and more. To create tools that scrape news articles, Python is an ideal programming language that provides this capability, on top of multiple other benefits such as its extensive libraries and more. And with news scraping being legal and ethical when used appropriately and for the right purpose, companies can enjoy the benefits of this noble practice to monitor their reputation, gather competitive intelligence, unearth fresh ideas, and more.</span></p><p class="c11 c27"><span class="c3 c13"><a class="c15" href="https://www.google.com/url?q=https://github.com/oxylabs/news-scraping&amp;sa=D&amp;source=editors&amp;ust=1672758784677659&amp;usg=AOvVaw1BpQ9Es9jj5hjbmawv34KC">Click here</a></span><span class="c2">&nbsp;and check out a repository on GitHub to find the complete code used in this post.</span></p><p class="c1"><span class="c2"></span></p><p class="c11 c27"><span class="c2">Found the post helpful? Leave your impressions in the comments below and click the like button!</span></p><p class="c0 c25"><span class="c2"></span></p><p class="c1"><span class="c16"></span></p></body></html>