Хотите удалить из веб-страницы и ее следующих страниц - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу извлечь название компании, персону, страну, телефон и адрес электронной почты в файл Excel. Я попробовал следующий код, но он возвращает только одно значение в файле Excel. Как это сделать на первой и последующих страницах?

import csv
import re
import requests
import urllib.request
from bs4 import BeautifulSoup
for page in range(10):
        url = "http://www.aepcindia.com/buyersdirectory"
        soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'lxml')
        tbody = soup('div', {'class':'view-content'})#[0].find_all('')
        f = open('filename.csv', 'w', newline = '')
        Headers = "Name,Person,Country,Email,Phone\n"
        csv_writer = csv.writer(f)
        f.write(Headers)
        for i in tbody:
                try:
                    name = i.find("div", {"class":"company_name"}).get_text()
                    person = i.find("div", {"class":"title"}).get_text()
                    country = i.find("div", {"class":"views-field views-field-field-country"}).get_text()
                    email = i.find("div", {"class":"email"}).get_text()
                    phone = i.find("div", {"class":"telephone_no"}).get_text()
                    print(name, person, country, email, phone)
                    f.write("{}".format(name).replace(","," ")+ ",{}".format(person)+ ",{}".format(country)+ ",{}".format(email) + ",{}".format(phone) + "\n")
                except: AttributeError
        f.close()

Вот ссылка на веб-страницу http://www.aepcindia.com/buyersdirectory

1 Ответ

0 голосов
/ 10 апреля 2020
import requests
from bs4 import BeautifulSoup
import csv

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}


def main(url):
    with requests.Session() as req:
        with open("data.csv", 'w', newline="") as f:
            writer = csv.writer(f)
            writer.writerow(["Name", "Title", "Country", "Email", "Phone"])
            for item in range(0, 10):
                print(f"Extracting Page# {item +1}")
                r = req.get(url.format(item), headers=headers)
                soup = BeautifulSoup(r.content, 'html.parser')

                name = [name.text for name in soup.select("div.company_name")]
                title = [title.text for title in soup.select("div.title")]
                country = [country.text for country in soup.findAll(
                    "div", class_="field-content", text=True)]
                email = [email.a.text for email in soup.select(
                    "div.email")]
                phone = [phone.text
                         for phone in soup.select("div.telephone_no")]
                data = zip(name, title, country, email, phone)
                writer.writerows(data)


main("http://www.aepcindia.com/buyersdirectory?page={}")

Вывод: просмотр в режиме онлайн

...