在Python中抓取网站后获取特定数据

时间:2016-12-24 00:13:13

标签: python web-crawler

这是我的第一个Python项目,我通过关注youtube视频编写了这个项目。虽然不太精通,但我认为我有编码的基础知识。

#importing the module that allows to connect to the internet
import requests

#this allows to get data from by crawling webpages
from bs4 import BeautifulSoup

#creating a loop to change url everytime it is executed
def creator_spider(max_pages):
page = 0
while page < max_pages:
    url = 'https://www.patreon.com/sitemap/campaigns/' + str(page)
    source_code = requests.get(url)

    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "html.parser")

    for link in soup.findAll('a', {'class': ''}):
        href = "https://www.patreon.com" + link.get('href')
        #title = link.string
        print(href)
        #print(title)
        get_single_item_data(href)
    page = page + 1

def get_single_item_data(item_url):
    source_code = requests.get(item_url)
    plain_text = source_code.text

    soup = BeautifulSoup(plain_text, "html.parser")
    print soup
    for item_name in soup.findAll('h6'):
    print(item_name.string)

在我抓取的每个页面中,我希望代码能够获得突出显示的信息:http://imgur.com/a/e59S9 源代码为:http://imgur.com/a/8qv7k

我认为我应该在get_single_item_data()函数中更改soup.findAll()的属性,但我所有的尝试都是徒劳的。对此有任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

来自bs4 docs

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class

搜索具有特定CSS类的标记非常有用,但CSS属性的名称“class”是Python中的保留字。使用class作为关键字参数会给出语法错误。从Beautiful Soup 4.1.2开始,您可以使用关键字参数class _:

按CSS类进行搜索
soup.find_all("a", class_="sister")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,

然而,仔细看看你在pic中提到的代码后,这种方法将无法得到你想要的东西。在源代码中,我看到了data-react-id。 DOM由ReactJS构建,并且requests.get(url)不会在您的头端执行JS。在浏览器中禁用JS以查看requests.get(url)返回的内容。

祝你好运