【问题标题】:how to scrape author name and author url from a webpage using python如何使用python从网页中抓取作者姓名和作者网址
【发布时间】:2021-09-06 07:01:08
【问题描述】:

我正在尝试从以下网页抓取作者姓名和作者网址。

https://medium.com/javascript-scene/top-javascript-frameworks-and-topics-to-learn-in-2019-b4142f38df20?source=tag_archive

我正在使用以下代码;

    author_flag = 0
    divs = soup.find_all('h2')
    for div in divs:
        author = div.find('a')
        if(author is not None):
            author_art.append(author.text)
            author_url.append('https://medium.com'+ author.get('href'))
            aurhor_flag = 1
            break
        if(author_flag==0):
            author_art.append('Author information missing')
            author_url.append('Author Url information missing')

谁能看看我在这做错了什么?因为这段代码没有选择任何东西。 它只是返回空白列表。

完整代码:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import re 

data = pd.read_csv('url_technology.csv')


author_art = []
author_url = []


for i in range(1): 
    try:   
    
        author_flag = 0
        divs = soup.find_all('meta')
        for div in divs:
            author = div.find('span')
            if(author is not None):
                author_art.append(author.text)
               
              author_url.append('https://medium.com'+author.get('href'))
                aurhor_flag = 1
                break
            if(author_flag==0):
                author_art.append('Author information missing')
                author_url.append('Author Url information missing')


    except:  
        print('no data found')
    
author_art = pd.DataFrame(title)
author_url = pd.DataFrame(url)


res = pd.concat([author_art, author_art] , axis=1)
res.columns = ['Author_Art', 'Author_url']
res.to_csv('combined1.csv')
print('File created successfully')

https://medium.com/javascript-scene/top-javascript-frameworks-and-topics-to-learn-in-2019-b4142f38df20?source=tag_archive---------0----------------------- https://medium.com/job-advice-for-software-engineers/what-i-want-and-dont-want-to-see-on-your-software-engineering-resume-cbc07913f7f6?source=tag_archive---------1----------------------- https://itnext.io/load-testing-using-apache-jmeter-af189dd6f805?source=tag_archive---------2----------------------- https://medium.com/s/story/black-mirror-bandersnatch-a-study-guide-c46dfe9156d?source=tag_archive---------3----------------------- https://medium.com/fast-company/the-worst-design-crimes-of-2018-56f32b027bb7?source=tag_archive---------4----------------------- https://towardsdatascience.com/make-your-pictures-beautiful-with-a-touch-of-machine-learning-magic-31672daa3032?source=tag_archive---------5----------------------- https://medium.com/hackernoon/the-state-of-ruby-2019-is-it-dying-509160a4fb92?source=tag_archive---------6-----------------------

【问题讨论】:

  • 你能提供更完整的代码,最好是一个最小的可重现的例子吗?您可能已经提出了请求并解析了内容,但看看您是如何做到的可以说明问题。
  • 当然,我添加了完整的代码,非常感谢您的帮助。
  • 在完整代码中,我有循环,我只使用过一次。我有 5000 个网页,我必须将它们刮到 Excel 表中。

标签: python python-2.7 web-scraping


【解决方案1】:

获取作者姓名和作者 URL 的一种可能方法是解析页面中嵌入的 Ld+Json 数据:

import json
import requests
from bs4 import BeautifulSoup

url = "https://medium.com/javascript-scene/top-javascript-frameworks-and-topics-to-learn-in-2019-b4142f38df20"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
data = json.loads(soup.select_one('[type="application/ld+json"]').contents[0])

# uncomment this to print all LD+JSON data:
# print(json.dumps(data, indent=4))

print("Author:", data["author"]["name"])
print("URL:", data["author"]["url"])

打印:

Author: Eric Elliott
URL: https://medium.com/@_ericelliott

编辑:返回作者姓名/URL的函数:

import json
import requests
from bs4 import BeautifulSoup


def get_author_name_url(medium_url):
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    data = json.loads(
        soup.select_one('[type="application/ld+json"]').contents[0]
    )
    return data["author"]["name"], data["author"]["url"]


url_list = [
    "https://medium.com/javascript-scene/top-javascript-frameworks-and-topics-to-learn-in-2019-b4142f38df20",
]

for url in url_list:
    name, url = get_author_name_url(url)
    print("Author:", name)
    print("URL:", url)

【讨论】:

  • 在上面的完整代码中,我有一个循环,我只运行一次(用于测试)。我有 5000 个网页,我必须将它们刮到 Excel 表中。如何把这个东西放到上面的循环和我可以加载到 excel 表中的 Dataframe 中?
  • @Qasim0787 是的,从我的脚本中创建一个返回名称/URL 的函数并将其放入循环中。
  • 它适用于这个特定的网址,但不适用于其他网址。
  • @Qasim0787 是的,每个服务器/站点都有点不同。并非所有网站都通用一个代码。
  • 你能检查一下它们之间是否有一些相似之处。或者我们可以做一个通用的。我在上面添加了几个网址作为参考
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多