python website-scraping using variables from text files

87 Views Asked by At

Does somebody know how I can scrape websites read the URL list IE from a .txt and then write each url result to a .txt with using the name of a from a .txt. So there will be the URL and Name files the code reads from and writes the body with the respective line from the .txt file. The closest I've found is below code however that's saving it all into the one .txt file that is a fixed name not variable; and its reading the URLs from a list. I'm guessing a loop would be the best way however I haven't seen code or much help for this type of task.

import requests
from bs4 import BeautifulSoup
from collections import Counter
urls = ["http://en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart","http://en.wikipedia.org/wiki/Golf"]

with open('thisisanew.txt', 'w', encoding='utf-8') as outfile:
     for url in urls:
     website = requests.get(url)
     soup = BeautifulSoup(website.content)
     text = [''.join(s.findAll(text=True))for s in soup.findAll('p')]
     for item in text:
            print(item ,file=outfile,)

Thanks for your help in advance!

1

There are 1 best solutions below

0
On
import requests
from bs4 import BeautifulSoup
from pathlib import Path
urls = ["http://en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart","http://en.wikipedia.org/wiki/Golf"]
for url in urls:
    # make requests
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    text = '\n'.join(s.get_text() for s in soup.findAll('p'))  # add '\n' betweent each p
    # write to file 
    filename = Path(url).name   # get the last part of url
    out_file = Path(filename).with_suffix('.txt')  # add.txt to filename
    with out_file.open(mode='w') as f:
        f.writelines(text)

out:

Golf.txt:

Golf is a club and ball sport in which players use various clubs to hit balls into a series of holes on a course in as few strokes as possible.
Golf, unlike most ball games, does not require a standardized playing area. The game is played on a course with an arranged progression of either nine or 18 holes. Each hole on the course must contain a tee box to start from, and a putting green containing the actual hole or cup (4.25 inches in width). There are other standard forms of terrain in between, such as the fairway, rough (long grass), sand traps, and hazards (water, rocks, fescue) but each hole on a course is unique in its specific layout and arrangement.
Golf is played for the lowest number of strokes by an individual, known as stroke play, or the lowest score on the most individual holes in a complete round by an individual or team, known as match play. Stroke play is the most commonly seen format at all levels.

Wolfgang_Amadeus_Mozart.txt

Wolfgang Amadeus Mozart (/ˈwʊlfɡæŋ æməˈdeɪəs ˈmoʊtsɑːrt/; MOHT-sart;[1] German: [ˈvɔlfɡaŋ amaˈdeːʊs ˈmoːtsaʁt]; 27 January 1756 – 5 December 1791), baptised as Johannes Chrysostomus Wolfgangus Theophilus Mozart,[2] was a prolific and influential composer of the Classical era.
Born in Salzburg, he showed prodigious ability from his earliest childhood. Already competent on keyboard and violin, he composed from the age of five and performed before European royalty. At 17, Mozart was engaged as a musician at the Salzburg court, but grew restless and traveled in search of a better position. While visiting Vienna in 1781, he was dismissed from his Salzburg position. He chose to stay in the capital, where he achieved fame but little financial security. During his final years in Vienna, he composed many of his best-known symphonies, concertos, and operas, and portions of the Requiem, which was largely unfinished at the time of his death. The circumstances of his early death have been much mythologized. He was survived by his wife Constanze and two sons.