如何在Python中进行网页抓取?

时间:2020-05-10 02:45:38

标签: python web-scraping beautifulsoup

我想网上搜刮特定的财务网。但是我一生都会那样做。我不懂HTML,所以对我来说很难。我想学习,因为我需要一个示例来开始网络抓取很多表格。 该网络来自智利的一个机构,名为“Comisiónpara el Mercado financiero”。网址为:“ http://www.cmfchile.cl/institucional/inc/valores_cuota/valor_serie.php?v1=C1KB5&v2=LPKA0ISQAKEHITB64IBM&v3=4ABCIV864AJ35MN64IBM&v4=V864A4ABCI&v5=J35MNS8IYM&v6=4ABCIV864A4ABCIV864A&v7=V864AISQAK&v8=V864A64IBM&v9=37G70LN68AGLD87IEAIXGLD87OL18863409LN68AOL188JKT99QHFLBMLXL410163LN68A&v10=21QYE48BCX99KWAEF88BWM6YB&v11=63409LN68AGLD8737GH0J35MN&v12=63409LN68AGLD8737GH04ABCI

有人可以告诉我该怎么做吗?我知道我可以使用BeautifulSoup并请求模块,但仅此而已。如果有的话,用Python撰写的有关网络抓取的书将非常有帮助。

3 个答案:

答案 0 :(得分:1)

正如您正确提到的那样,这是“ Web Scraping”,而python具有惊人的模块。对我们而言,在继续进行之前,了解技术性很重要。

最常用的模块之一是-> BeautifulSoup

因此,要从任何网页获取信息,

  • 您首先需要了解网页的结构。
  • 此外,考虑到我们出于其他原因进一步使用网页中的信息,在某些情况下这可能并不完全合法。
  • 更大的挑战是,网页是否支持抓取?这对于进一步进行更为重要。
    • 如何找到它?可以通过查看网页的源代码来找出。
    • 如果要获取的文本/信息在源代码或href之一中可见,那么应该可以使用Beautifulsoup对其进行抓取。

解决方案-

  • 在找到解决方案之前,您必须了解HTML结构以及识别网页上任何元素的方式
  • 有很多方法,例如

    • 使用网页上任何元素的“ id”
    • 直接使用类或标记名
    • 使用元素的xpath
    • 或上述所有内容的组合
  • 一旦您达到了这一点,到现在为止,您对我们将继续前进的方式一定很清楚

#make a request to the webpage, and grab the html respone
page = requests.get("your url here").content

#pass it on to beautifulsoup 
from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')

#Depending on how you want to find, you can use  findbyclass, findbytag, and #other methods 
soup.findAll('your tag')

答案 1 :(得分:0)

完整的工作代码。您必须等待很多时间(大约10分钟或更短)才能获得结果。因此,请在完成后回复

由于链接具有动态数据,因此加载数据需要花费时间。美丽的汤有些超时,因此无法响应。好的主意是在这里等待页面完全加载之前在这里使用硒。

尝试了数百种获取数据的方法之后,这是最终的解决方案。

library(`SL.NO`.`STUDENT ID`,`BOOK`,`DATE`)    
books(`sl.no`,`title`,`authors`,`subject`,`availability`)

student(`STUDENT ID`,`STUDENT NAME`)

答案 2 :(得分:0)

import requests
import pandas as pd

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0'
}


def main(url):
    r = requests.get(url, headers=headers)
    df = pd.read_html(r.content)[0]
    print(df)


main("http://www.cmfchile.cl/institucional/inc/valores_cuota/valor_serie.php?v1=C1KB5&v2=LPKA0ISQAKEHITB64IBM&v3=4ABCIV864AJ35MN64IBM&v4=V864A4ABCI&v5=J35MNS8IYM&v6=4ABCIV864A4ABCIV864A&v7=V864AISQAK&v8=V864A64IBM&v9=37G70LN68AGLD87IEAIXGLD87OL18863409LN68AOL188JKT99QHFLBMLXL410163LN68A&v10=21QYE48BCX99KWAEF88BWM6YB&v11=63409LN68AGLD8737GH0J35MN&v12=63409LN68AGLD8737GH04ABCI")