【问题标题】:Scraping a list of urls from a csv with Beautiful soup使用 Beautiful soup 从 csv 中抓取 url 列表
【发布时间】:2018-07-01 05:15:40
【问题描述】:

我在 urls.csv 中有一个 url 列表

http://www.indianngos.org/ngo_detail.aspx?nprof=292241149
http://www.indianngos.org/ngo_detail.aspx?nprof=9986241242
http://www.indianngos.org/ngo_detail.aspx?nprof=319824125

我的代码如下:

import requests
from bs4 import BeautifulSoup
import csv

with open('urls.csv' , 'r') as csv_file:
csv_reader = csv.reader(csv_file)

for line in csv_reader:
    r = requests.get(line[0]).text

    soup = BeautifulSoup(r,'lxml')

    csv_file = open('output.csv', 'w')

    csv_writer = csv.writer(csv_file)
    csv_writer.writerow(['Ngoname', 'CEO', 'City', 'Address', 'Phone', 'Mobile', 'E-mail'])
    # print(soup.prettify())

    ngoname = soup.find('h1')
    print('NGO Name :', ngoname.text)

    ceo = soup.find('h2', class_='').text
    ceo_name = ceo.split(':')
    print('CeoName:', ceo_name[1])

    city = soup.find_all('span')
    print('City :', city[5].text)

    address = soup.find_all('span')
    print('Address :', address[6].text)

    phone = soup.find_all('span')
    print('Phone :', phone[7].text)

    mobile = soup.find_all('span')
    print('Mobile :', mobile[8].text)

    email = soup.find_all('span')
    print('Email_id :', email[9].text)

 csv_writer.writerow([ngoname.text, ceo_name[1], city[5].text, address[6].text, phone[7].text, mobile[8].text, email[9].text])

csv_file.close()

我只从这个爬虫获取最后一个 url 的数据。 我如何从输出 csv 中的每个 url 获取数据

【问题讨论】:

  • 您是否已经尝试调试您的代码?
  • 您为什么要使用csv.reader 阅读网址?为什么不只是with open('urls.txt') as f: for url in f: # ...?对文件进行迭代会为您提供行。
  • 我试过了,但没有做对。
  • 你能@BaileyParker 给我一个示例代码吗?
  • 没有。您可以阅读文档并尝试自己编写。我给您的内容实际上是复制并粘贴到您当前的代码中。但是,我们不是来为您完成所有工作的。现在,如果在尝试修复它时遇到另一个问题,请随时提出。

标签: python csv web-scraping beautifulsoup export-to-csv


【解决方案1】:

您需要为所有三个 CSV 文件打开输出文件。目前您每次都在覆盖:

import requests
from bs4 import BeautifulSoup
import csv

with open('urls.csv', newline='') as f_urls, open('output.csv', 'w', newline='') as f_output:
    csv_urls = csv.reader(f_urls)
    csv_output = csv.writer(f_output)
    csv_output.writerow(['Ngoname', 'CEO', 'City', 'Address', 'Phone', 'Mobile', 'E-mail'])

    for line in csv_urls:
        r = requests.get(line[0]).text
        soup = BeautifulSoup(r, 'lxml')

        ngoname = soup.find('h1')
        print('NGO Name :', ngoname.text)

        ceo = soup.find('h2', class_='').text
        ceo_name = ceo.split(':')
        print('CeoName:', ceo_name[1])

        city = soup.find_all('span')
        print('City :', city[5].text)

        address = soup.find_all('span')
        print('Address :', address[6].text)

        phone = soup.find_all('span')
        print('Phone :', phone[7].text)

        mobile = soup.find_all('span')
        print('Mobile :', mobile[8].text)

        email = soup.find_all('span')
        print('Email_id :', email[9].text)

        csv_output.writerow([ngoname.text, ceo_name[1], city[5].text, address[6].text, phone[7].text, mobile[8].text, email[9].text])

这种方法会给你一个输出文件,其中包含:

Ngoname,CEO,City,Address,Phone,Mobile,E-mail
A CONSUMER WELFARE SOCIETY, Bhanu Pratap,Delhi,201 Vardhman Grand Market Sec 3 Dwarka New Delhi 110075,011-20078086,,admin@consumercourt.in
AADARSH MAHILA KALYAN SAMITI, Kusum Lata,Delhi,"G-61, Jai Vihar Extn. Baprola, Najafgarh, New Delhi-110043",011-28012307,9953574659,snehayadav96@yahoo.com
AAJ KI AWAJ JAN KALYAN SOCIETY, YASHPAL SINGH BALIYAN,Delhi,HEAD OFFICE,011-43029251,9899668750,aajkiawaj@gmail.com

【讨论】:

  • 谢谢你教我正确的方法,我刚开始学习编码。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2020-04-22
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
相关资源
最近更新 更多