使用Python自动进行webscraping(无类/ id)

时间:2017-04-30 09:40:13

标签: python excel python-3.x web-scraping beautifulsoup

目前我正在开发我的第一个Python项目。 我正在尝试构建一个简单的程序来自动从网站http://socialblade.com进行网页抓取 我们的想法是与youtube用户(excel,csv,...)建立一个列表,并将其提供给python脚本。然后,Python会抓取用户页面并生成一个csv文件,其中包含最新数量的每日视图或订阅者。

我已经按照BS4的一些教程,请求,但是我被困了。 似乎在socialblade上没有我想要刮掉的div的class / id标签。

离。这是我想收集的其中一个项目的代码。

<div style="width: 140px; float: left;">16,518
</div>

除此之外,我还不确定如何将链接提供给Python程序中的不同用户。 目前,我们有一个包含用户(行)列表的文件。其中一列是指向其Youtube帐户的链接。

非常基本这就是我想要做的事情:

对于用户1到n 1)从excel文件中读取用户链接 2)从socialblade页面中删除“观看次数”和“订阅次数” 3)将此数据写入csv / excel文件

希望这有点可以理解:)

非常感谢并期待着提升我的Python技能!

亲切的问候,祝周末愉快!

1 个答案:

答案 0 :(得分:1)

好吧,如果我理解这一点,首先你必须在Excel文件中有用户列表,我没有一个,所以在我的情况下,我使用此代码获得前25名并将其保存到xlsx文件中:

_GET

接下来是获取链接和抓取信息,我会使用此代码执行此操作:

from openpyxl import load_workbook, Workbook
from lxml.html import fromstring
import requests


def get_number_of_views_and_subscriptions(socialblade_url="https://socialblade.com/youtube/"):
    """Function returns account names, account urls, number of subscribers and number of views
     from socialblade web-site using requests and xpath"""

    request = requests.get(socialblade_url)
    tree = fromstring(request.content)

    account_names = tree.xpath("/html/body/div[9]/div[1]/div/div[3]/a/text()")
    account_urls = ["https://socialblade.com" + _ for _ in tree.xpath("/html/body/div[9]/div[1]/div/div[3]/a/@href")]
    subscribers = tree.xpath("/html/body/div[9]/div[1]/div/div[5]/text()")
    views = tree.xpath("/html/body/div[9]/div[1]/div/div[6]/text()")

    data = zip(account_names, account_urls, subscribers, views)

    return data


def writing_to_excel(file_path="users_data.xlsx", data=get_number_of_views_and_subscriptions()):
    """Function writes data of type ["account names", "account urls", "number of subscribers", "number of views"]
    to an xlsx file"""

    workbook = Workbook()
    worksheet = workbook.create_sheet("Socialblade", 0)
    worksheet.append(["account names", "account urls", "number of subscribers", "number of views"])

    for item in data:
        worksheet.append(item)

    workbook.save(file_path)