I am trying to scrape the data from a webpage having drop down values. The Url_list & all_urls both are producing exactly the same URLs i want, but the code is failing due to connection error each time.
Below is the code i have used
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import re
import pandas as pd
import json
all_urls=[]
Data =[]
url_list=[]
url = 'https://www.sfma.org.sg/member/category/'
page = 'https://www.sfma.org.sg/member/info'
text = requests.get(url).text
d = re.findall(r'var\s*cObject\s*=\s*(.*)\s*;', text)[0]
d = re.sub(r'(\w+)(?=:)', r'"\1"', d)
d = json.loads(d.replace("'", '"'))
for c in d['category']:
AC = [c['permalinks']]
urls = url + AC[0]
all_urls.append(urls)
for info in all_urls:
pages = requests.get(info)
soup = BeautifulSoup(pages.content, 'html.parser')
script_sections = soup.find_all('script')
for i in range(len(script_sections)):
if len(script_sections[i].contents) >= 1:
txt = script_sections[i].contents[0]
pattern = re.compile(r'permalink:\'(.*?)\'')
permlinks = re.findall(pattern, txt)
for i in permlinks:
href = "../info/{{permalink}}"
href = href.split('{')[0]+i
full_url = urljoin(page, href)
url_list.append(full_url)
for m in url_list:
entry=[]
Newpages = requests.get(m)
soup_2 =BeautifulSoup(Newpages.content, 'html.parser')
Member = soup_2.find_all('h5', attrs={'class' :'w3-text-sfma'})
Member_Name = [Member_Name.text.strip() for Member_Name in Member]
Details = soup_2.find_all('p')
other_details = [other_details.text.strip() for other_details in Details]
Details_final = other_details[1:9]
Address = Details_final[0:4]
Tel = [y for y in Details_final if y.startswith('Tel')]
Fax = [m for m in Details_final if m.startswith('Fax')]
Email = [n for n in Details_final if n.startswith('Email')]
Website = [s for s in Details_final if s.startswith('Website')]
entry.append(Member_Name)
entry.append(Address)
entry.append(Tel)
entry.append(Fax)
entry.append(Email)
entry.append(Website)
Data.append(entry)
The error i am getting is
SysCallError: (10054, 'WSAECONNRESET')