2016-01-11 9 views
8

मैं कुछ पाइथन कोड पर काम कर रहा हूं ताकि सरकारी वेबसाइटों से सोशल मीडिया खातों के लिंक प्राप्त हो सकें, जिससे आसानी से अनुसंधान के लिए नगर पालिकाओं से संपर्क किया जा सके। मैंने 2.7 में काम करने के लिए कुछ कोड अनुकूलित करने में कामयाब रहा है, जो किसी दिए गए इनपुट वेबसाइट पर फेसबुक, ट्विटर, लिंक्डइन और google + के सभी लिंक प्रिंट करता है। जिस मुद्दे का मैं वर्तमान में अनुभव कर रहा हूं वह यह है कि मैं केवल एक वेब पेज पर लिंक नहीं ढूंढ रहा हूं, लेकिन लगभग 200 वेबसाइटों की सूची में, मेरे पास एक्सेल फ़ाइल में है। मुझे पाइथन में इस तरह के सूचियों को आयात करने का कोई अनुभव नहीं है, इसलिए मैं सोच रहा था कि कोई भी कोड को देख सकता है, और यदि संभव हो तो इन सभी वेब पृष्ठों को base_url के रूप में सेट करने का एक उचित तरीका सुझाएं;वेब स्क्रैपर में कई वेब पेजों का उपयोग

import cookielib 

import mechanize 

base_url = "http://www.amsterdam.nl" 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
br.set_handle_robots(False) 
br.set_handle_equiv(False) 
br.set_handle_redirect(True) 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
br.addheaders = [('User-agent', 
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
page = br.open(base_url, timeout=10) 

links = {} 
for link in br.links(): 
    if link.url.find('facebook')>=0 or link.url.find('twitter')>=0 or link.url.find('linkedin')>=0 or link.url.find('plus.google')>=0: 
    links[link.url] = {'count': 1, 'texts': [link.text]} 

# printing 
for link, data in links.iteritems(): 
print "%s - %s - %s - %d" % (base_url, link, ",".join(data['texts']), data['count']) 

उत्तर

5

आपने बताया कि आपके पास सभी वेबसाइटों की सूची के साथ एक एक्सेल फ़ाइल है? इसलिए आप एक्सेल फ़ाइल को csv फ़ाइल के रूप में निर्यात कर सकते हैं जिसे आप अपने पायथन कोड से मान पढ़ सकते हैं।

Here's some more information regarding that

Here's how to work directly with excel files

आप पंक्तियों के साथ कुछ कर सकते हैं:

import csv 

links = [] 

with open('urls.csv', 'r') as csv_file: 
    csv_reader = csv.reader(csv_file) 
    # Simple example where only a single column of URL's is present 
    links = list(csv_reader) 

अब links सभी यूआरएल की एक सूची है। फिर आप उस फ़ंक्शन के अंदर सूची में लूप कर सकते हैं जो पृष्ठ लाता है और डेटा को स्क्रैप करता है।

def extract_social_links(links): 
    for link in links: 
     base_url = link 

     br = mechanize.Browser() 
     cj = cookielib.LWPCookieJar() 
     br.set_cookiejar(cj) 
     br.set_handle_robots(False) 
     br.set_handle_equiv(False) 
     br.set_handle_redirect(True) 
     br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),  max_time=1) 
     br.addheaders = [('User-agent', 
      'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
     page = br.open(base_url, timeout=10) 

     links = {} 
     for link in br.links(): 
      if link.url.find('facebook')>=0 or link.url.find('twitter')>=0 or  link.url.find('linkedin')>=0 or link.url.find('plus.google')>=0: 
      links[link.url] = {'count': 1, 'texts': [link.text]} 

     # printing 
     for link, data in links.iteritems(): 
     print "%s - %s - %s - %d" % (base_url, link, ",".join(data['texts']), data['count']) 

एक तरफ के रूप में, आपको संभवतः अपनी स्थिति को विभाजित करना चाहिए ताकि उन्हें और अधिक पठनीय बनाया जा सके।

+0

ठीक है, यह समझ में आता है, बस सूची में सभी लिंक जोड़ने के लिए, धन्यवाद। आपके कोड के साथ मुझे मिली एक त्रुटि दी गई है; 'ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल" सी: \ उपयोगकर्ता \ स्टीफन \ दस्तावेज़ \ अनुसंधान परियोजना जीआरएस 50806 \ पूर्ववर्ती डेटा \ टेस्ट - kopie.py ", लाइन 11, डेटा.लिंक्स (सूची (csv_reader)) नाम त्रुटि: नाम 'डेटा' परिभाषित नहीं किया गया है ' क्या डेटा को वैध वाक्यविन्यास के रूप में परिभाषित करने का कोई तरीका है? –

+0

@ स्टीफनफोर्च मेरे बुरे, जब मैंने जवाब संपादित किया तो मैंने सूची 'लिंक' के सभी उदाहरणों को संपादित नहीं किया। मैं इसे अभी संपादित कर रहा हूं। उस पंक्ति में रिक्त सूची के लिंक की सूची जोड़ना है जिसे हमने पहले बाद में उपयोग करने के लिए परिभाषित किया था। – Bhargav

+0

ठीक है, बहुत बहुत धन्यवाद, कोड जो सीएसवी-फाइल से किसी सूची में आइटम जोड़ता है, काम करता है, क्योंकि 'प्रिंट सूचियां' देता है '[[http://www.amsterdam.nl/', 'http : //www.rotterdam.nl/ ',' http://www.denhaag.nl/ ',' http://www.utrecht.nl ']] '। हालांकि, पूरे कोड का उपयोग करते समय, यह बस चलाने के लिए प्रतीत नहीं होता है। मुझे लगता है कि यह लिंक प्रारूप के साथ कुछ करने के लिए हो सकता है, हालांकि, मुझे नहीं लगता कि दस्तावेज़ को प्रारूपित किया जाना चाहिए, उदा। उद्धरण चिह्नों का उपयोग किया जाना चाहिए, क्या यह एक स्तंभ में मूल्यों के साथ एक सूची होनी चाहिए, आदि? –

संबंधित मुद्दे