【问题标题】:web scraping info and printing it in a csv file网络抓取信息并将其打印在 csv 文件中
【发布时间】:2020-02-07 22:39:22
【问题描述】:

我需要使用 Python(beautifulsoup 或 scrapy)解析 HTML 文件中的信息,然后将其打印到 csv 文件中。相关信息是在我的帐户here 中看到的文件名和次数。

关于次数的相关HTML:

<div class="hidden-tiles views C C1">
      <nobr class="hidden-xs">num </nobr>
      <nobr class="hidden-sm hidden-md hidden-lg">num</nobr>
</div>

文件名的相关 HTML:

<div class="ttl">
       {filename}
</div>

我能做什么:

import requests  
page = requests.get("https://archive.org/details  /%40kareem76?&sort=-publicdate&page=2")  
page  
page.content  
nbr = BeautifulSoup(page.content, 'html.parser')  
nbr.find_all('div', class_='hidden-tiles views C C1')

【问题讨论】:

  • 到底是什么问题?我不确定我是否理解您要执行的操作。充其量,这只是一个需求列表。
  • @AMC 我试图达到的目标,在下面回答
  • 没关系,问题还是要说清楚的。
  • @AMC 你是对的,我正在学习,这是我第一次使用 python,就像所有人一样,我处于时间的约束下

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


【解决方案1】:

也许这是另一种解决方案。

from simplified_scrapy.request import req
from simplified_scrapy.simplified_doc import SimplifiedDoc
url = 'https://archive.org/details/@kareem76?&sort=-publicdate&page=2'
html = req.get(url)
doc = SimplifiedDoc(html)
blocks = doc.selects('div.results>div.item-ia').notContains(['mobile-header','hidden-tiles','collection-ia'],attr='class')
for block in blocks:
  nums = block.selects('div.hidden-tiles views C C1>nobr>text()')
  title = block.select('div.ttl>text()')
  print (title, nums[0],nums[1])

结果:

ننتصر او ننتصر من اجل الربيع العربي المنصف المرزوقي 1,056 1.1K
الرحلة مذكرات آدمي المنصف المرزوقي ط.مزيدة و منقحة 874 874
الثورة التونسية المجيدة، بنية ثورة وصيرورتها من خلال يومياتها عزمي بشارة الطبعة الثانية 469 469
The Case For Impeachment Allan J. Lichtman 65 65
CONTRAT ASSURANCE CREDIT MACRON ALLIANZ 137 137
...

【讨论】:

    【解决方案2】:

    这段代码应该可以完成这项工作:

    import requests  
    from bs4 import BeautifulSoup
    import pandas as pd
    
    
    html = requests.get("https://archive.org/details/@kareem76").text
    
    soup = BeautifulSoup(html, 'html.parser')  
    titles = [i.text.strip() for i in soup.find_all('div', class_='ttl')]
    views = [i.find('nobr').text for i in soup.find_all('div', class_='hidden-tiles views C C1')]
    
    df = pd.DataFrame({'titles':titles,
                      'views':views})
    
    
    df.to_csv("titles-views.csv",
              mode='w',
              index = None,
              header=True)
    

    你会得到(只是摘录):

    【讨论】:

    • 我必须添加“encode('utf-8')”才能成为 i.text.encode('utf-8').strip()
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多